Configuration payload for computing statistics on dataset fields and Rosetta Stone attributes. Supports recursive nesting for arbitrarily deep schemas.
Two distinct inheritance rules apply depending on what is being configured:
1. Stat set (enabled_stats) — all-or-nothing per level
When a level provides enabled_stats, it completely replaces the parent's stat set. There is no merging: the child's list is the final set of stats for that scope. Properties not listed in a parent's properties array receive no stats — they are not inherited from any parent level.
Example: an object field address has children city, zip, and state. If the field config lists only city in properties, then zip and state get no stats at all, regardless of what defaults or scope say.
2. Stat options (stat_options) — partial override with per-property inheritance
When a level provides only stat_options (without enabled_stats), it inherits the stat set from its parent and applies option overrides on top. Individual option properties follow a granular rule: only explicitly provided option properties are overridden; unspecified properties keep the value resolved from the parent level.
Example: defaults enable histogram with max_bins: 50, overflow: none. A namespace scope provides stat_options: { histogram: { max_bins: 200 } } without enabled_stats. The resolved scope inherits the full stat set from defaults, and the histogram options become max_bins: 200, overflow: none — overflow was not overridden, so the parent's value (none) is preserved.
Chained stat_options overrides across levels
Per-property inheritance applies at every level of the chain, and each level inherits from its resolved parent — not from the original defaults. This means overrides accumulate.
Example — scope overrides max_bins, field overrides overflow:
3. **price field** (stat_options only, inherits resolved scope) → `histogram(max_bins=200, overflow=truncate)` — field overrides `overflow` to `truncate`; `max_bins` is not specified, so it keeps scope's `200` (not defaults' `50`).
The key point: `price` gets `max_bins=200` from scope, not `max_bins=50` from defaults. Each level inherits from its immediate resolved parent, not from the root. The same per-property inheritance applies at nested levels (object properties, array items). A deeply nested node that provides only `stat_options` inherits the stat set and unspecified option properties from the effective parent resolved at the namespace level (defaults + scope).
Global default stat configuration applied to all eligible fields and properties. The server automatically filters stats incompatible with a field's resolved type and node kind. Note: enabled_stats is required for defaults because there is no parent scope to inherit from. Providing only stat_options without enabled_stats is invalid at this level.
Configuration for dataset schema columns. Use 'scope' to override defaults for all dataset fields, or to disable the namespace entirely via enabled_stats: []. Use 'fields' for per-field overrides. Null when the config does not touch this namespace.
Configuration for Rosetta Stone attributes. Use 'scope' to override defaults for all Rosetta Stone fields, or to disable the namespace entirely via enabled_stats: []. Use 'fields' for per-field overrides. Null when the config does not touch this namespace.
Option 1
Option 2
Show child attributes
Response
200 - application/json
OK
Full statistics configuration entity with metadata. Returned by both PUT (create/update) and GET endpoints.
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Narrative I/O Knowledge Base","colors":{"primary":"#1438F5","light":"#F4F7FB","dark":"#010A28"},"logo":{"light":"https://mintcdn.com/narrative-07c7a1f7/ia6SQX79O4nc7uYf/logo/banner.png?fit=max\u0026auto=format\u0026n=ia6SQX79O4nc7uYf\u0026q=85\u0026s=99860b25011c79366624a87d1f648861","dark":"https://mintcdn.com/narrative-07c7a1f7/ia6SQX79O4nc7uYf/logo/banner-dark.png?fit=max\u0026auto=format\u0026n=ia6SQX79O4nc7uYf\u0026q=85\u0026s=604f9688855cf1123b9eddfc8a5bf0e5"},"favicon":"https://mintcdn.com/narrative-07c7a1f7/DaYE2y2_p0IkASZU/favicon.svg?fit=max\u0026auto=format\u0026n=DaYE2y2_p0IkASZU\u0026q=85\u0026s=9961047bdb2aaf9298577e1c3e624c24","navbar":{"links":[{"href":"mailto:[email protected]","label":"Support"}],"primary":{"type":"button","label":"Open Narrative","href":"https://app.narrative.io"}},"footer":{"socials":{"github":"https://github.com/narrative-io","linkedin":"https://linkedin.com/company/narrative-io"}},"seo":{"indexing":"navigable"},"integrations":{"fathom":{"siteId":"WELVPSSZ"},"ga4":{"measurementId":"G-27FP7EFNFW"},"cookies":{}},"contextual":{"options":["copy","view","chatgpt","claude","perplexity","mcp","cursor","vscode"],"display":"header"},"styling":{"latex":true},"navigation":{"global":{"anchors":[{"anchor":"Release Notes","icon":"clock-rotate-left","href":"/release-notes"}]},"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"narrative-07c7a1f7","hasAudioNarration":false,"actualSubdomain":"narrative-07c7a1f7","customDomains":["docs.narrative.io"],"gitSource":{"type":"github","owner":"narrative-io","repo":"mintlify-docs","deployBranch":"main","contentDirectory":"","isPrivate":true,"mountPath":"","label":""},"chroma":{"liveDeploymentHistoryId":"6aea2dd4709ff05859fc3fea","collectionId":"9d7cbc87-3fe2-4198-b299-fc6612024d01","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6aea2dd4709ff05859fc3fea"},"feedback":{"thumbs":true,"agentFeedback":true},"entitlements":{"AI_CHAT":{"status":"ENABLED"},"WEB_MCP":{"status":"ENABLED"},"NARRATION":{"status":"ENABLED"}},"buildId":"6aea2dd4709ff05859fc3fea","clientVersion":"0.0.4054","searchFilterCounts":[{"language":"default","tag":"API Documentation","count":225},{"language":"default","tag":"Reference","count":112},{"language":"default","tag":"Connectors","count":103},{"language":"default","tag":"All connectors","count":101},{"language":"default","tag":"Architecture Reference","count":77},{"language":"default","tag":"Agent Conversations","count":64},{"language":"default","tag":"Concepts","count":62},{"language":"default","tag":"Guides","count":58},{"language":"default","tag":"Errors","count":55},{"language":"default","tag":"NQL","count":36}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableAskAiSearchBar":true,"deflection":{"enabled":true,"email":"[email protected]","showHelpButton":true}},"basePath":"","hasChatPermissions":true,"hasWebMcpPermissions":true,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"byok-sep-25","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"vite-origin","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-updated-9-15","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"rbac-expansion","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[],"page":{"pagePath":"api-reference/dataset-statistics/put-statistics-configuration","slug":"/api-reference/dataset-statistics/put-statistics-configuration","pageMetadata":{"title":"Put Statistics Configuration","description":"Create or update the statistics configuration for a dataset. Replaces any existing configuration.","deprecated":null,"version":null,"openapi":"https://docs-cdn.narrative.io/api-reference/main/openapi.json put /datasets/{dataset_id}/statistics-configuration","href":"/api-reference/dataset-statistics/put-statistics-configuration","autogeneratedByOpenApi":true},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"Create or update the statistics configuration for a dataset. Replaces any existing configuration.\"\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){return _jsx(_Fragment,{})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Put Statistics Configuration","description":"Create or update the statistics configuration for a dataset. Replaces any existing configuration.","deprecated":null,"version":null,"openapi":"https://docs-cdn.narrative.io/api-reference/main/openapi.json put /datasets/{dataset_id}/statistics-configuration","href":"/api-reference/dataset-statistics/put-statistics-configuration","autogeneratedByOpenApi":true}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[],"codeExamples":{}},"jsLinks":["/_mintlify/custom/narrative-07c7a1f7/d5d45b2d00effc8b/secure-privacy.js"],"openApiReferenceData":{"operation":{"summary":"Put Statistics Configuration","description":"Create or update the statistics configuration for a dataset. Replaces any existing configuration.","parameters":["d9286ac1-7e59-4318-97cb-f79c35172e2c"],"tags":["Dataset Statistics"],"security":["3ff41679-d879-41a8-ad77-b2b89c47346d"],"requestBody":"ebbe7442-29de-4c0d-8f7a-1803278a915c","responses":{"200":"2d316201-d633-4898-ba83-8d0b328653f9"},"method":"put","type":"path","servers":["f5cdb00a-7cd2-403b-b56f-64a8355e9e84","dce399bf-7abb-458f-baf7-1fe589b6e908"],"path":"/datasets/{dataset_id}/statistics-configuration","baseUrlOptions":["https://api-dev.narrative.io","https://api.narrative.io"],"title":"Put Statistics Configuration","codeSamples":[],"requiredOnlyExamples":false,"requestExampleType":"generated","responseExampleType":"generated"},"dependencies":{"parameters":{"d9286ac1-7e59-4318-97cb-f79c35172e2c":{"in":"path","name":"dataset_id","required":true,"description":"Unique identifier for a dataset.","schema":{"type":"integer","isRequired":true,"description":"Unique identifier for a dataset.","uniqueKey":"","typeLabel":"integer"}}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"Configuration payload for computing statistics on dataset fields and Rosetta Stone attributes. Supports recursive nesting for arbitrarily deep schemas.\n\n## Inheritance chain\ndefaults → namespace scope → field override → nested node overrides.\n\nTwo distinct inheritance rules apply depending on what is being configured:\n\n### 1. Stat set (enabled_stats) — all-or-nothing per level\nWhen a level provides `enabled_stats`, it **completely replaces** the parent's stat set. There is no merging: the child's list is the final set of stats for that scope. Properties not listed in a parent's `properties` array receive **no stats** — they are not inherited from any parent level.\nExample: an object field `address` has children `city`, `zip`, and `state`. If the field config lists only `city` in `properties`, then `zip` and `state` get no stats at all, regardless of what defaults or scope say.\n\n### 2. Stat options (stat_options) — partial override with per-property inheritance\nWhen a level provides only `stat_options` (without `enabled_stats`), it inherits the stat set from its parent and applies option overrides on top. Individual option properties follow a granular rule: **only explicitly provided option properties are overridden; unspecified properties keep the value resolved from the parent level**.\nExample: defaults enable `histogram` with `max_bins: 50, overflow: none`. A namespace scope provides `stat_options: { histogram: { max_bins: 200 } }` without `enabled_stats`. The resolved scope inherits the full stat set from defaults, and the histogram options become `max_bins: 200, overflow: none` — `overflow` was not overridden, so the parent's value (`none`) is preserved.\n\n### Chained stat_options overrides across levels\nPer-property inheritance applies at every level of the chain, and each level inherits from its **resolved parent** — not from the original defaults. This means overrides accumulate.\nExample — scope overrides `max_bins`, field overrides `overflow`:\n```json {\n \"defaults\": {\n \"enabled_stats\": [\"value_count\", \"histogram\"],\n \"stat_options\": { \"histogram\": { \"max_bins\": 50 } }\n },\n \"refresh\": { \"trigger\": \"manual\" },\n \"dataset\": {\n \"scope\": {\n \"stat_options\": { \"histogram\": { \"max_bins\": 200 } }\n },\n \"fields\": [\n {\n \"field_name\": \"price\",\n \"stat_options\": { \"histogram\": { \"overflow\": \"truncate\" } }\n }\n ]\n }\n} ```\nResolution for `price`:\n1. **defaults** → `histogram(max_bins=50, overflow=none)`\n2. **scope** (stat_options only, inherits defaults) → `histogram(max_bins=200, overflow=none)` —\n scope overrides `max_bins` to 200; `overflow` is not specified, so it keeps defaults' `none`.\n\n3. **price field** (stat_options only, inherits resolved scope) → `histogram(max_bins=200, overflow=truncate)` —\n field overrides `overflow` to `truncate`; `max_bins` is not specified, so it keeps scope's `200` (not\n defaults' `50`).\n\nThe key point: `price` gets `max_bins=200` from scope, not `max_bins=50` from defaults. Each level inherits from its immediate resolved parent, not from the root.\nThe same per-property inheritance applies at nested levels (object properties, array items). A deeply nested node that provides only `stat_options` inherits the stat set and unspecified option properties from the effective parent resolved at the namespace level (defaults + scope).","required":["defaults","refresh"],"additionalProperties":false,"properties":{"defaults":{"oneOf":[{"type":"object","description":"Global default stat configuration applied to all eligible fields and properties. The server automatically filters stats incompatible with a field's resolved type and node kind. Note: enabled_stats is required for defaults because there is no parent scope to inherit from. Providing only stat_options without enabled_stats is invalid at this level.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"defaults.oneOf.0.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"defaults.oneOf.0.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"defaults.oneOf.0.enabled_stats.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"defaults.oneOf.0.enabled_stats","typeLabel":"enum\u003cstring>[] | null"},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"defaults.oneOf.0.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"defaults.oneOf.0.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"defaults.oneOf.0.stat_options.oneOf.0.histogram","typeLabel":"object"}},"uniqueKey":"defaults.oneOf.0.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"uniqueKey":"defaults.oneOf.0.stat_options.oneOf.1","typeLabel":"null"}],"uniqueKey":"defaults.oneOf.0.stat_options","typeLabel":"object | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"defaults.oneOf.0","typeLabel":"object"},{"type":"object","description":"Global default stat configuration applied to all eligible fields and properties. The server automatically filters stats incompatible with a field's resolved type and node kind. Note: enabled_stats is required for defaults because there is no parent scope to inherit from. Providing only stat_options without enabled_stats is invalid at this level.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"defaults.oneOf.1.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"defaults.oneOf.1.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"defaults.oneOf.1.stat_options.oneOf.0.histogram","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"defaults.oneOf.1.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"isRequired":true,"uniqueKey":"defaults.oneOf.1.stat_options.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"defaults.oneOf.1.stat_options","typeLabel":"object | null"},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"defaults.oneOf.1.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"defaults.oneOf.1.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"defaults.oneOf.1.enabled_stats.oneOf.1","typeLabel":"null"}],"uniqueKey":"defaults.oneOf.1.enabled_stats","typeLabel":"enum\u003cstring>[] | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"defaults.oneOf.1","typeLabel":"object"}],"isRequired":true,"uniqueKey":"defaults","typeLabel":"object"},"refresh":{"oneOf":[{"type":"object","description":"When to recompute statistics. Exactly one trigger type must be specified.","required":["trigger","cron_expression"],"properties":{"trigger":{"type":"string","enum":["cron"],"isRequired":true,"uniqueKey":"refresh.oneOf.0.trigger","typeLabel":"enum\u003cstring>"},"cron_expression":{"type":"string","minLength":1,"description":"A standard 5-field cron expression defining the refresh schedule. All times are interpreted in UTC.\n\n## Format\n\n``` ┌───────────── minute (0–59) │ ┌───────────── hour (0–23) │ │ ┌───────────── day of month (1–31) │ │ │ ┌───────────── month (1–12) │ │ │ │ ┌───────────── day of week (0–7, where 0 and 7 = Sunday) │ │ │ │ │ * * * * * ```\n\n## Supported syntax\n\n- `*` — every value in the field's range\n- `,` — list separator (e.g. `1,15` for the 1st and 15th)\n- `-` — range (e.g. `1-5` for Monday through Friday)\n- `/` — step (e.g. `*/15` in the minute field = every 15 minutes)\n- `?` — unspecified, allowed in day-of-month and day-of-week\n- `L` — last day, allowed in day-of-month (last day of month) and day-of-week (`5L` = last Friday)\n- `W` — nearest weekday, allowed in day-of-month (e.g. `15W` = nearest weekday to the 15th)\n- `LW` — last weekday of the month, allowed in day-of-month\n- `#` — nth occurrence, allowed in day-of-week (e.g. `5#3` = third Friday)\n- Nicknames: `@yearly`, `@annually`, `@monthly`, `@weekly`, `@daily`, `@midnight`, `@hourly`\n\n## Day-of-week numbering\n\nMonday = 1 through Saturday = 6, Sunday = 0 or 7. Both `0` and `7` map to Sunday.\n\n## Examples\n\n| Expression | Meaning | |-------------------|----------------------------------------| | `0 0 * * *` | Every day at midnight UTC | | `0 3 * * 1` | Every Monday at 03:00 UTC | | `*/15 * * * *` | Every 15 minutes | | `0 0 1 * *` | First day of every month at midnight | | `0 6 * * 1-5` | Weekdays at 06:00 UTC | | `0 0 L * ?` | Last day of every month at midnight | | `0 9 ? * 5#1` | First Friday of every month at 09:00 | | `@daily` | Equivalent to `0 0 * * *` |","isRequired":true,"uniqueKey":"refresh.oneOf.0.cron_expression","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"refresh.oneOf.0","typeLabel":"object"},{"type":"object","description":"When to recompute statistics. Exactly one trigger type must be specified.","required":["trigger"],"properties":{"trigger":{"type":"string","enum":["on_update"],"isRequired":true,"uniqueKey":"refresh.oneOf.1.trigger","typeLabel":"enum\u003cstring>"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"refresh.oneOf.1","typeLabel":"object"},{"type":"object","description":"When to recompute statistics. Exactly one trigger type must be specified.","required":["trigger"],"properties":{"trigger":{"type":"string","enum":["manual"],"isRequired":true,"uniqueKey":"refresh.oneOf.2.trigger","typeLabel":"enum\u003cstring>"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"refresh.oneOf.2","typeLabel":"object"}],"isRequired":true,"uniqueKey":"refresh","typeLabel":"object"},"dataset":{"oneOf":[{"type":"object","description":"Configuration for dataset schema columns. Use 'scope' to override defaults for all dataset fields, or to disable the namespace entirely via enabled_stats: []. Use 'fields' for per-field overrides. Null when the config does not touch this namespace.","required":["scope"],"properties":{"scope":{"oneOf":[{"type":"object","description":"A stat selection with optional per-stat configuration. At least one of enabled_stats or stat_options must be provided. An empty enabled_stats array explicitly disables all stats for this scope. approx_count_distinct and count_distinct are mutually exclusive — the server rejects any request that includes both in the same enabled_stats array.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"dataset.oneOf.0.scope.oneOf.0.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"dataset.oneOf.0.scope.oneOf.0.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"dataset.oneOf.0.scope.oneOf.0.enabled_stats.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"dataset.oneOf.0.scope.oneOf.0.enabled_stats","typeLabel":"enum\u003cstring>[] | null"},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"dataset.oneOf.0.scope.oneOf.0.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"dataset.oneOf.0.scope.oneOf.0.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"dataset.oneOf.0.scope.oneOf.0.stat_options.oneOf.0.histogram","typeLabel":"object"}},"uniqueKey":"dataset.oneOf.0.scope.oneOf.0.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"uniqueKey":"dataset.oneOf.0.scope.oneOf.0.stat_options.oneOf.1","typeLabel":"null"}],"uniqueKey":"dataset.oneOf.0.scope.oneOf.0.stat_options","typeLabel":"object | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"dataset.oneOf.0.scope.oneOf.0","typeLabel":"object"},{"type":"object","description":"A stat selection with optional per-stat configuration. At least one of enabled_stats or stat_options must be provided. An empty enabled_stats array explicitly disables all stats for this scope. approx_count_distinct and count_distinct are mutually exclusive — the server rejects any request that includes both in the same enabled_stats array.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"dataset.oneOf.0.scope.oneOf.1.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"dataset.oneOf.0.scope.oneOf.1.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"dataset.oneOf.0.scope.oneOf.1.stat_options.oneOf.0.histogram","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"dataset.oneOf.0.scope.oneOf.1.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"isRequired":true,"uniqueKey":"dataset.oneOf.0.scope.oneOf.1.stat_options.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"dataset.oneOf.0.scope.oneOf.1.stat_options","typeLabel":"object | null"},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"dataset.oneOf.0.scope.oneOf.1.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"dataset.oneOf.0.scope.oneOf.1.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"dataset.oneOf.0.scope.oneOf.1.enabled_stats.oneOf.1","typeLabel":"null"}],"uniqueKey":"dataset.oneOf.0.scope.oneOf.1.enabled_stats","typeLabel":"enum\u003cstring>[] | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"dataset.oneOf.0.scope.oneOf.1","typeLabel":"object"},{"type":"null","isRequired":true,"uniqueKey":"dataset.oneOf.0.scope.oneOf.2","typeLabel":"null"}],"isRequired":true,"uniqueKey":"dataset.oneOf.0.scope","typeLabel":"object · object · null"},"fields":{"oneOf":[{"type":"array","description":"Per-field overrides for individual dataset columns.","items":{"type":"object","description":"Common stat configuration shared by dataset and Rosetta Stone field configs. Exactly one of three modes must be used (the server rejects invalid combinations):\n\n1. **Primitive field** — provide enabled_stats and/or stat_options at the top level.\n Must not include self, properties, or items.\n\n2. **Non-primitive field** — provide self, properties, and/or items for nested structure.\n Must not include enabled_stats or stat_options at this level;\n use self for node-level stat configuration instead.\n\n3. **No-op / inherit** — leave all stat fields null or absent. The field inherits its\n configuration from the namespace scope or global defaults.\n\n\nThis schema deliberately has no `oneOf` over the three modes. Mode 3 is all five slots null, which matches neither of the other two, so a closed union here would reject it.\nClosing this schema is left to the two that compose it. `additionalProperties: false` here would only see the properties below, so it would reject the `field_name` and `attribute_name` its siblings contribute; `DatasetFieldConfig` and `RosettaStoneFieldConfig` use `unevaluatedProperties: false`, which sees the whole composition.","required":["field_name"],"properties":{"field_name":{"type":"string","description":"The column name as defined in the dataset schema. Must be a valid identifier (alphanumeric and underscores, max 256 chars).","maxLength":256,"pattern":"^[a-zA-Z0-9_]+$","isRequired":true,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].field_name","typeLabel":"string"},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].enabled_stats.oneOf.1","typeLabel":"null"}],"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].enabled_stats","typeLabel":"enum\u003cstring>[] | null"},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].stat_options.oneOf.0.histogram","typeLabel":"object"}},"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].stat_options.oneOf.1","typeLabel":"null"}],"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].stat_options","typeLabel":"object | null"},"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive field node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].self.oneOf.0.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].self.oneOf.0.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].self.oneOf.0.enabled_stats.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].self.oneOf.0.enabled_stats","typeLabel":"enum\u003cstring>[] | null"},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].self.oneOf.0.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].self.oneOf.0.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].self.oneOf.0.stat_options.oneOf.0.histogram","typeLabel":"object"}},"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].self.oneOf.0.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].self.oneOf.0.stat_options.oneOf.1","typeLabel":"null"}],"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].self.oneOf.0.stat_options","typeLabel":"object | null"}},"additionalProperties":false,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].self.oneOf.0","typeLabel":"object"},{"type":"object","description":"Statistics for the non-primitive field node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].self.oneOf.1.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].self.oneOf.1.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].self.oneOf.1.stat_options.oneOf.0.histogram","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].self.oneOf.1.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"isRequired":true,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].self.oneOf.1.stat_options.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].self.oneOf.1.stat_options","typeLabel":"object | null"},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].self.oneOf.1.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].self.oneOf.1.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].self.oneOf.1.enabled_stats.oneOf.1","typeLabel":"null"}],"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].self.oneOf.1.enabled_stats","typeLabel":"enum\u003cstring>[] | null"}},"additionalProperties":false,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].self.oneOf.1","typeLabel":"object"},{"type":"null","description":"Statistics for the non-primitive field node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].self.oneOf.2","typeLabel":"null"}],"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].self","typeLabel":"object · object · null"},"properties":{"oneOf":[{"type":"array","description":"Explicit configurations for named child properties of an object field. Only listed children receive stats — unlisted ones are skipped entirely.","minItems":1,"items":{"oneOf":[{"type":"object","description":"Statistics configuration for a named property of an object node. The property may itself be primitive or non-primitive (recursive). A property must carry at least one configuration field — there is no no-op/inherited variant at the nested level. If a property is listed, it must specify what stats to compute. approx_count_distinct and count_distinct are mutually exclusive — the server rejects any request that includes both in the same enabled_stats array.","required":["path","enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.0.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.0.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.0.enabled_stats.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.0.enabled_stats","typeLabel":"enum\u003cstring>[] | null"},"path":{"type":"string","description":"Name of the child property relative to the parent object node. Must be a valid identifier (alphanumeric and underscores, max 256 chars).","maxLength":256,"pattern":"^[a-zA-Z0-9_]+$","isRequired":true,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.0.path","typeLabel":"string"},"self":{"type":"null","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.0.self","typeLabel":"null"},"properties":{"type":"null","description":"Explicit configurations for named child properties of this object property. Only listed children receive stats — unlisted ones are skipped entirely.","minItems":1,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.0.properties","typeLabel":"null"},"items":{"type":"null","description":"Configuration for the array item node of this array property.","uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.0.\\items","typeLabel":"null"},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.0.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.0.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.0.stat_options.oneOf.0.histogram","typeLabel":"object"}},"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.0.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.0.stat_options.oneOf.1","typeLabel":"null"}],"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.0.stat_options","typeLabel":"object | null"}},"additionalProperties":false,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.0","typeLabel":"object"},{"type":"object","description":"Statistics configuration for a named property of an object node. The property may itself be primitive or non-primitive (recursive). A property must carry at least one configuration field — there is no no-op/inherited variant at the nested level. If a property is listed, it must specify what stats to compute. approx_count_distinct and count_distinct are mutually exclusive — the server rejects any request that includes both in the same enabled_stats array.","required":["path","stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.1.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.1.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.1.stat_options.oneOf.0.histogram","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.1.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"isRequired":true,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.1.stat_options.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.1.stat_options","typeLabel":"object | null"},"path":{"type":"string","description":"Name of the child property relative to the parent object node. Must be a valid identifier (alphanumeric and underscores, max 256 chars).","maxLength":256,"pattern":"^[a-zA-Z0-9_]+$","isRequired":true,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.1.path","typeLabel":"string"},"self":{"type":"null","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.1.self","typeLabel":"null"},"properties":{"type":"null","description":"Explicit configurations for named child properties of this object property. Only listed children receive stats — unlisted ones are skipped entirely.","minItems":1,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.1.properties","typeLabel":"null"},"items":{"type":"null","description":"Configuration for the array item node of this array property.","uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.1.\\items","typeLabel":"null"},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.1.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.1.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.1.enabled_stats.oneOf.1","typeLabel":"null"}],"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.1.enabled_stats","typeLabel":"enum\u003cstring>[] | null"}},"additionalProperties":false,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.1","typeLabel":"object"},{"type":"object","description":"Statistics configuration for a named property of an object node. The property may itself be primitive or non-primitive (recursive). A property must carry at least one configuration field — there is no no-op/inherited variant at the nested level. If a property is listed, it must specify what stats to compute. approx_count_distinct and count_distinct are mutually exclusive — the server rejects any request that includes both in the same enabled_stats array.","required":["path","self"],"properties":{"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.self.oneOf.0.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.self.oneOf.0.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.self.oneOf.0.enabled_stats.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.self.oneOf.0.enabled_stats","typeLabel":"enum\u003cstring>[] | null"},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.self.oneOf.0.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.self.oneOf.0.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.self.oneOf.0.stat_options.oneOf.0.histogram","typeLabel":"object"}},"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.self.oneOf.0.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.self.oneOf.0.stat_options.oneOf.1","typeLabel":"null"}],"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.self.oneOf.0.stat_options","typeLabel":"object | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.self.oneOf.0","typeLabel":"object"},{"type":"object","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.self.oneOf.1.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.self.oneOf.1.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.self.oneOf.1.stat_options.oneOf.0.histogram","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.self.oneOf.1.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"isRequired":true,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.self.oneOf.1.stat_options.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.self.oneOf.1.stat_options","typeLabel":"object | null"},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.self.oneOf.1.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.self.oneOf.1.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.self.oneOf.1.enabled_stats.oneOf.1","typeLabel":"null"}],"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.self.oneOf.1.enabled_stats","typeLabel":"enum\u003cstring>[] | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.self.oneOf.1","typeLabel":"object"},{"type":"null","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","isRequired":true,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.self.oneOf.2","typeLabel":"null"}],"isRequired":true,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.self","typeLabel":"object · object · null"},"path":{"type":"string","description":"Name of the child property relative to the parent object node. Must be a valid identifier (alphanumeric and underscores, max 256 chars).","maxLength":256,"pattern":"^[a-zA-Z0-9_]+$","isRequired":true,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.path","typeLabel":"string"},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.enabled_stats","typeLabel":"null"},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.stat_options","typeLabel":"null"},"properties":{"oneOf":[{"type":"array","description":"Explicit configurations for named child properties of this object property. Only listed children receive stats — unlisted ones are skipped entirely.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"},"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.properties.oneOf.0","typeLabel":"array"},{"type":"null","description":"Explicit configurations for named child properties of this object property. Only listed children receive stats — unlisted ones are skipped entirely.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"},"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.properties.oneOf.1","typeLabel":"null"}],"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.properties","typeLabel":"array | null"},"items":{"oneOf":[{"type":"object","description":"Configuration for the array item node of this array property.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.0.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.0.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.0.enabled_stats.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.0.enabled_stats","typeLabel":"enum\u003cstring>[] | null"},"self":{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.0.self","typeLabel":"null"},"properties":{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.0.properties","typeLabel":"null"},"items":{"oneOf":[{"type":"null","description":"Configuration for the array item node.","uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.0.\\items.oneOf.0","typeLabel":"null"},{"type":"null","description":"Configuration for the array item node.","uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.0.\\items.oneOf.1","typeLabel":"null"}],"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.0.\\items","typeLabel":"null"},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.0.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.0.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.0.stat_options.oneOf.0.histogram","typeLabel":"object"}},"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.0.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.0.stat_options.oneOf.1","typeLabel":"null"}],"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.0.stat_options","typeLabel":"object | null"}},"additionalProperties":false,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.0","typeLabel":"object"},{"type":"object","description":"Configuration for the array item node of this array property.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.1.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.1.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.1.stat_options.oneOf.0.histogram","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.1.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"isRequired":true,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.1.stat_options.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.1.stat_options","typeLabel":"object | null"},"self":{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.1.self","typeLabel":"null"},"properties":{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.1.properties","typeLabel":"null"},"items":{"oneOf":[{"type":"null","description":"Configuration for the array item node.","uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.1.\\items.oneOf.0","typeLabel":"null"},{"type":"null","description":"Configuration for the array item node.","uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.1.\\items.oneOf.1","typeLabel":"null"}],"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.1.\\items","typeLabel":"null"},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.1.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.1.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.1.enabled_stats.oneOf.1","typeLabel":"null"}],"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.1.enabled_stats","typeLabel":"enum\u003cstring>[] | null"}},"additionalProperties":false,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.1","typeLabel":"object"},{"type":"object","description":"Configuration for the array item node of this array property.","required":["self"],"properties":{"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.self.oneOf.0.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.self.oneOf.0.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.self.oneOf.0.enabled_stats.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.self.oneOf.0.enabled_stats","typeLabel":"enum\u003cstring>[] | null"},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.self.oneOf.0.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.self.oneOf.0.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.self.oneOf.0.stat_options.oneOf.0.histogram","typeLabel":"object"}},"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.self.oneOf.0.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.self.oneOf.0.stat_options.oneOf.1","typeLabel":"null"}],"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.self.oneOf.0.stat_options","typeLabel":"object | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.self.oneOf.0","typeLabel":"object"},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.self.oneOf.1.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.self.oneOf.1.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.self.oneOf.1.stat_options.oneOf.0.histogram","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.self.oneOf.1.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"isRequired":true,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.self.oneOf.1.stat_options.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.self.oneOf.1.stat_options","typeLabel":"object | null"},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.self.oneOf.1.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.self.oneOf.1.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.self.oneOf.1.enabled_stats.oneOf.1","typeLabel":"null"}],"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.self.oneOf.1.enabled_stats","typeLabel":"enum\u003cstring>[] | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.self.oneOf.1","typeLabel":"object"},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","isRequired":true,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.self.oneOf.2","typeLabel":"null"}],"isRequired":true,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.self","typeLabel":"object · object · null"},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.enabled_stats","typeLabel":"null"},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.stat_options","typeLabel":"null"},"properties":{"oneOf":[{"type":"array","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"},"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.properties.oneOf.0","typeLabel":"array"},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"},"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.properties.oneOf.1","typeLabel":"null"}],"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.properties","typeLabel":"array | null"},"items":{"oneOf":[{"description":"Configuration for the array item node.","uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.\\items.oneOf.0","typeLabel":"any"},{"type":"null","description":"Configuration for the array item node.","uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.\\items.oneOf.1","typeLabel":"null"}],"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.\\items","typeLabel":"any | null"}},"additionalProperties":false,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2","typeLabel":"object"},{"type":"object","description":"Configuration for the array item node of this array property.","required":["properties"],"properties":{"properties":{"oneOf":[{"type":"array","items":{"oneOf":[{}],"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.properties.oneOf.0.items.[INDEX]","typeLabel":"any"},"description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"isRequired":true,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.properties.oneOf.0","typeLabel":"any[]"},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"isRequired":true,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.properties.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.properties","typeLabel":"any[] | null"},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.enabled_stats","typeLabel":"null"},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.stat_options","typeLabel":"null"},"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.self.oneOf.0.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.self.oneOf.0.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.self.oneOf.0.enabled_stats.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.self.oneOf.0.enabled_stats","typeLabel":"enum\u003cstring>[] | null"},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.self.oneOf.0.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.self.oneOf.0.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.self.oneOf.0.stat_options.oneOf.0.histogram","typeLabel":"object"}},"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.self.oneOf.0.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.self.oneOf.0.stat_options.oneOf.1","typeLabel":"null"}],"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.self.oneOf.0.stat_options","typeLabel":"object | null"}},"additionalProperties":false,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.self.oneOf.0","typeLabel":"object"},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.self.oneOf.1.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.self.oneOf.1.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.self.oneOf.1.stat_options.oneOf.0.histogram","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.self.oneOf.1.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"isRequired":true,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.self.oneOf.1.stat_options.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.self.oneOf.1.stat_options","typeLabel":"object | null"},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.self.oneOf.1.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.self.oneOf.1.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.self.oneOf.1.enabled_stats.oneOf.1","typeLabel":"null"}],"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.self.oneOf.1.enabled_stats","typeLabel":"enum\u003cstring>[] | null"}},"additionalProperties":false,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.self.oneOf.1","typeLabel":"object"},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.self.oneOf.2","typeLabel":"null"}],"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.self","typeLabel":"object · object · null"},"items":{"oneOf":[{"description":"Configuration for the array item node.","uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.\\items.oneOf.0","typeLabel":"any"},{"type":"null","description":"Configuration for the array item node.","uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.\\items.oneOf.1","typeLabel":"null"}],"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.\\items","typeLabel":"any | null"}},"additionalProperties":false,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3","typeLabel":"object"},{"type":"object","description":"Configuration for the array item node of this array property.","required":["items"],"properties":{"items":{"oneOf":[{"description":"Configuration for the array item node.","isRequired":true,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.\\items.oneOf.0","typeLabel":"any"},{"type":"null","description":"Configuration for the array item node.","isRequired":true,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.\\items.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.\\items","typeLabel":"any | null"},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.enabled_stats","typeLabel":"null"},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.stat_options","typeLabel":"null"},"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.self.oneOf.0.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.self.oneOf.0.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.self.oneOf.0.enabled_stats.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.self.oneOf.0.enabled_stats","typeLabel":"enum\u003cstring>[] | null"},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.self.oneOf.0.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.self.oneOf.0.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.self.oneOf.0.stat_options.oneOf.0.histogram","typeLabel":"object"}},"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.self.oneOf.0.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.self.oneOf.0.stat_options.oneOf.1","typeLabel":"null"}],"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.self.oneOf.0.stat_options","typeLabel":"object | null"}},"additionalProperties":false,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.self.oneOf.0","typeLabel":"object"},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.self.oneOf.1.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.self.oneOf.1.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.self.oneOf.1.stat_options.oneOf.0.histogram","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.self.oneOf.1.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"isRequired":true,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.self.oneOf.1.stat_options.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.self.oneOf.1.stat_options","typeLabel":"object | null"},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.self.oneOf.1.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.self.oneOf.1.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.self.oneOf.1.enabled_stats.oneOf.1","typeLabel":"null"}],"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.self.oneOf.1.enabled_stats","typeLabel":"enum\u003cstring>[] | null"}},"additionalProperties":false,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.self.oneOf.1","typeLabel":"object"},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.self.oneOf.2","typeLabel":"null"}],"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.self","typeLabel":"object · object · null"},"properties":{"oneOf":[{"type":"array","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"},"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.properties.oneOf.0","typeLabel":"array"},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"},"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.properties.oneOf.1","typeLabel":"null"}],"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.properties","typeLabel":"array | null"}},"additionalProperties":false,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4","typeLabel":"object"},{"type":"null","description":"Configuration for the array item node of this array property.","uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.5","typeLabel":"null"}],"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items","typeLabel":"object · object · object · object · object · null"}},"additionalProperties":false,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2","typeLabel":"object"},{"type":"object","description":"Statistics configuration for a named property of an object node. The property may itself be primitive or non-primitive (recursive). A property must carry at least one configuration field — there is no no-op/inherited variant at the nested level. If a property is listed, it must specify what stats to compute. approx_count_distinct and count_distinct are mutually exclusive — the server rejects any request that includes both in the same enabled_stats array.","required":["path","properties"],"properties":{"properties":{"oneOf":[{"type":"array","items":{"oneOf":[{}],"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.properties.oneOf.0.items.[INDEX]","typeLabel":"any"},"description":"Explicit configurations for named child properties of this object property. Only listed children receive stats — unlisted ones are skipped entirely.","minItems":1,"isRequired":true,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.properties.oneOf.0","typeLabel":"any[]"},{"type":"null","description":"Explicit configurations for named child properties of this object property. Only listed children receive stats — unlisted ones are skipped entirely.","minItems":1,"isRequired":true,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.properties.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.properties","typeLabel":"any[] | null"},"path":{"type":"string","description":"Name of the child property relative to the parent object node. Must be a valid identifier (alphanumeric and underscores, max 256 chars).","maxLength":256,"pattern":"^[a-zA-Z0-9_]+$","isRequired":true,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.path","typeLabel":"string"},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.enabled_stats","typeLabel":"null"},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.stat_options","typeLabel":"null"},"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.self.oneOf.0.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.self.oneOf.0.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.self.oneOf.0.enabled_stats.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.self.oneOf.0.enabled_stats","typeLabel":"enum\u003cstring>[] | null"},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.self.oneOf.0.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.self.oneOf.0.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.self.oneOf.0.stat_options.oneOf.0.histogram","typeLabel":"object"}},"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.self.oneOf.0.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.self.oneOf.0.stat_options.oneOf.1","typeLabel":"null"}],"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.self.oneOf.0.stat_options","typeLabel":"object | null"}},"additionalProperties":false,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.self.oneOf.0","typeLabel":"object"},{"type":"object","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.self.oneOf.1.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.self.oneOf.1.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.self.oneOf.1.stat_options.oneOf.0.histogram","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.self.oneOf.1.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"isRequired":true,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.self.oneOf.1.stat_options.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.self.oneOf.1.stat_options","typeLabel":"object | null"},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.self.oneOf.1.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.self.oneOf.1.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.self.oneOf.1.enabled_stats.oneOf.1","typeLabel":"null"}],"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.self.oneOf.1.enabled_stats","typeLabel":"enum\u003cstring>[] | null"}},"additionalProperties":false,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.self.oneOf.1","typeLabel":"object"},{"type":"null","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.self.oneOf.2","typeLabel":"null"}],"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.self","typeLabel":"object · object · null"},"items":{"oneOf":[{"type":"object","description":"Configuration for the array item node of this array property.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.0.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.0.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.0.enabled_stats.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.0.enabled_stats","typeLabel":"enum\u003cstring>[] | null"},"self":{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.0.self","typeLabel":"null"},"properties":{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.0.properties","typeLabel":"null"},"items":{"oneOf":[{"type":"null","description":"Configuration for the array item node.","uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.0.\\items.oneOf.0","typeLabel":"null"},{"type":"null","description":"Configuration for the array item node.","uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.0.\\items.oneOf.1","typeLabel":"null"}],"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.0.\\items","typeLabel":"null"},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.0.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.0.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.0.stat_options.oneOf.0.histogram","typeLabel":"object"}},"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.0.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.0.stat_options.oneOf.1","typeLabel":"null"}],"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.0.stat_options","typeLabel":"object | null"}},"additionalProperties":false,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.0","typeLabel":"object"},{"type":"object","description":"Configuration for the array item node of this array property.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.1.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.1.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.1.stat_options.oneOf.0.histogram","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.1.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"isRequired":true,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.1.stat_options.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.1.stat_options","typeLabel":"object | null"},"self":{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.1.self","typeLabel":"null"},"properties":{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.1.properties","typeLabel":"null"},"items":{"oneOf":[{"type":"null","description":"Configuration for the array item node.","uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.1.\\items.oneOf.0","typeLabel":"null"},{"type":"null","description":"Configuration for the array item node.","uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.1.\\items.oneOf.1","typeLabel":"null"}],"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.1.\\items","typeLabel":"null"},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.1.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.1.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.1.enabled_stats.oneOf.1","typeLabel":"null"}],"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.1.enabled_stats","typeLabel":"enum\u003cstring>[] | null"}},"additionalProperties":false,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.1","typeLabel":"object"},{"type":"object","description":"Configuration for the array item node of this array property.","required":["self"],"properties":{"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.self.oneOf.0.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.self.oneOf.0.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.self.oneOf.0.enabled_stats.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.self.oneOf.0.enabled_stats","typeLabel":"enum\u003cstring>[] | null"},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.self.oneOf.0.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.self.oneOf.0.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.self.oneOf.0.stat_options.oneOf.0.histogram","typeLabel":"object"}},"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.self.oneOf.0.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.self.oneOf.0.stat_options.oneOf.1","typeLabel":"null"}],"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.self.oneOf.0.stat_options","typeLabel":"object | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.self.oneOf.0","typeLabel":"object"},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.self.oneOf.1.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.self.oneOf.1.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.self.oneOf.1.stat_options.oneOf.0.histogram","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.self.oneOf.1.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"isRequired":true,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.self.oneOf.1.stat_options.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.self.oneOf.1.stat_options","typeLabel":"object | null"},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.self.oneOf.1.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.self.oneOf.1.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.self.oneOf.1.enabled_stats.oneOf.1","typeLabel":"null"}],"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.self.oneOf.1.enabled_stats","typeLabel":"enum\u003cstring>[] | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.self.oneOf.1","typeLabel":"object"},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","isRequired":true,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.self.oneOf.2","typeLabel":"null"}],"isRequired":true,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.self","typeLabel":"object · object · null"},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.enabled_stats","typeLabel":"null"},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.stat_options","typeLabel":"null"},"properties":{"oneOf":[{"type":"array","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"},"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.properties.oneOf.0","typeLabel":"array"},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"},"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.properties.oneOf.1","typeLabel":"null"}],"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.properties","typeLabel":"array | null"},"items":{"oneOf":[{"description":"Configuration for the array item node.","uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.\\items.oneOf.0","typeLabel":"any"},{"type":"null","description":"Configuration for the array item node.","uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.\\items.oneOf.1","typeLabel":"null"}],"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.\\items","typeLabel":"any | null"}},"additionalProperties":false,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2","typeLabel":"object"},{"type":"object","description":"Configuration for the array item node of this array property.","required":["properties"],"properties":{"properties":{"oneOf":[{"type":"array","items":{"oneOf":[{}],"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.properties.oneOf.0.items.[INDEX]","typeLabel":"any"},"description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"isRequired":true,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.properties.oneOf.0","typeLabel":"any[]"},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"isRequired":true,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.properties.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.properties","typeLabel":"any[] | null"},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.enabled_stats","typeLabel":"null"},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.stat_options","typeLabel":"null"},"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.self.oneOf.0.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.self.oneOf.0.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.self.oneOf.0.enabled_stats.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.self.oneOf.0.enabled_stats","typeLabel":"enum\u003cstring>[] | null"},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.self.oneOf.0.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.self.oneOf.0.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.self.oneOf.0.stat_options.oneOf.0.histogram","typeLabel":"object"}},"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.self.oneOf.0.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.self.oneOf.0.stat_options.oneOf.1","typeLabel":"null"}],"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.self.oneOf.0.stat_options","typeLabel":"object | null"}},"additionalProperties":false,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.self.oneOf.0","typeLabel":"object"},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.self.oneOf.1.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.self.oneOf.1.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.self.oneOf.1.stat_options.oneOf.0.histogram","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.self.oneOf.1.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"isRequired":true,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.self.oneOf.1.stat_options.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.self.oneOf.1.stat_options","typeLabel":"object | null"},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.self.oneOf.1.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.self.oneOf.1.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.self.oneOf.1.enabled_stats.oneOf.1","typeLabel":"null"}],"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.self.oneOf.1.enabled_stats","typeLabel":"enum\u003cstring>[] | null"}},"additionalProperties":false,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.self.oneOf.1","typeLabel":"object"},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.self.oneOf.2","typeLabel":"null"}],"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.self","typeLabel":"object · object · null"},"items":{"oneOf":[{"description":"Configuration for the array item node.","uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.\\items.oneOf.0","typeLabel":"any"},{"type":"null","description":"Configuration for the array item node.","uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.\\items.oneOf.1","typeLabel":"null"}],"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.\\items","typeLabel":"any | null"}},"additionalProperties":false,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3","typeLabel":"object"},{"type":"object","description":"Configuration for the array item node of this array property.","required":["items"],"properties":{"items":{"oneOf":[{"description":"Configuration for the array item node.","isRequired":true,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.\\items.oneOf.0","typeLabel":"any"},{"type":"null","description":"Configuration for the array item node.","isRequired":true,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.\\items.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.\\items","typeLabel":"any | null"},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.enabled_stats","typeLabel":"null"},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.stat_options","typeLabel":"null"},"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.self.oneOf.0.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.self.oneOf.0.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.self.oneOf.0.enabled_stats.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.self.oneOf.0.enabled_stats","typeLabel":"enum\u003cstring>[] | null"},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.self.oneOf.0.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.self.oneOf.0.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.self.oneOf.0.stat_options.oneOf.0.histogram","typeLabel":"object"}},"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.self.oneOf.0.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.self.oneOf.0.stat_options.oneOf.1","typeLabel":"null"}],"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.self.oneOf.0.stat_options","typeLabel":"object | null"}},"additionalProperties":false,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.self.oneOf.0","typeLabel":"object"},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.self.oneOf.1.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.self.oneOf.1.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.self.oneOf.1.stat_options.oneOf.0.histogram","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.self.oneOf.1.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"isRequired":true,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.self.oneOf.1.stat_options.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.self.oneOf.1.stat_options","typeLabel":"object | null"},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.self.oneOf.1.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.self.oneOf.1.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.self.oneOf.1.enabled_stats.oneOf.1","typeLabel":"null"}],"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.self.oneOf.1.enabled_stats","typeLabel":"enum\u003cstring>[] | null"}},"additionalProperties":false,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.self.oneOf.1","typeLabel":"object"},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.self.oneOf.2","typeLabel":"null"}],"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.self","typeLabel":"object · object · null"},"properties":{"oneOf":[{"type":"array","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"},"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.properties.oneOf.0","typeLabel":"array"},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"},"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.properties.oneOf.1","typeLabel":"null"}],"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.properties","typeLabel":"array | null"}},"additionalProperties":false,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4","typeLabel":"object"},{"type":"null","description":"Configuration for the array item node of this array property.","uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.5","typeLabel":"null"}],"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items","typeLabel":"object · object · object · object · object · null"}},"additionalProperties":false,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3","typeLabel":"object"},{"type":"object","description":"Statistics configuration for a named property of an object node. The property may itself be primitive or non-primitive (recursive). A property must carry at least one configuration field — there is no no-op/inherited variant at the nested level. If a property is listed, it must specify what stats to compute. approx_count_distinct and count_distinct are mutually exclusive — the server rejects any request that includes both in the same enabled_stats array.","required":["path","items"],"properties":{"items":{"oneOf":[{"type":"object","description":"Configuration for the array item node of this array property.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.0.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.0.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.0.enabled_stats.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.0.enabled_stats","typeLabel":"enum\u003cstring>[] | null"},"self":{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.0.self","typeLabel":"null"},"properties":{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.0.properties","typeLabel":"null"},"items":{"oneOf":[{"type":"null","description":"Configuration for the array item node.","uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.0.\\items.oneOf.0","typeLabel":"null"},{"type":"null","description":"Configuration for the array item node.","uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.0.\\items.oneOf.1","typeLabel":"null"}],"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.0.\\items","typeLabel":"null"},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.0.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.0.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.0.stat_options.oneOf.0.histogram","typeLabel":"object"}},"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.0.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.0.stat_options.oneOf.1","typeLabel":"null"}],"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.0.stat_options","typeLabel":"object | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.0","typeLabel":"object"},{"type":"object","description":"Configuration for the array item node of this array property.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.1.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.1.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.1.stat_options.oneOf.0.histogram","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.1.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"isRequired":true,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.1.stat_options.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.1.stat_options","typeLabel":"object | null"},"self":{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.1.self","typeLabel":"null"},"properties":{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.1.properties","typeLabel":"null"},"items":{"oneOf":[{"type":"null","description":"Configuration for the array item node.","uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.1.\\items.oneOf.0","typeLabel":"null"},{"type":"null","description":"Configuration for the array item node.","uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.1.\\items.oneOf.1","typeLabel":"null"}],"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.1.\\items","typeLabel":"null"},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.1.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.1.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.1.enabled_stats.oneOf.1","typeLabel":"null"}],"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.1.enabled_stats","typeLabel":"enum\u003cstring>[] | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.1","typeLabel":"object"},{"type":"object","description":"Configuration for the array item node of this array property.","required":["self"],"properties":{"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.self.oneOf.0.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.self.oneOf.0.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.self.oneOf.0.enabled_stats.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.self.oneOf.0.enabled_stats","typeLabel":"enum\u003cstring>[] | null"},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.self.oneOf.0.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.self.oneOf.0.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.self.oneOf.0.stat_options.oneOf.0.histogram","typeLabel":"object"}},"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.self.oneOf.0.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.self.oneOf.0.stat_options.oneOf.1","typeLabel":"null"}],"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.self.oneOf.0.stat_options","typeLabel":"object | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.self.oneOf.0","typeLabel":"object"},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.self.oneOf.1.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.self.oneOf.1.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.self.oneOf.1.stat_options.oneOf.0.histogram","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.self.oneOf.1.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"isRequired":true,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.self.oneOf.1.stat_options.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.self.oneOf.1.stat_options","typeLabel":"object | null"},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.self.oneOf.1.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.self.oneOf.1.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.self.oneOf.1.enabled_stats.oneOf.1","typeLabel":"null"}],"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.self.oneOf.1.enabled_stats","typeLabel":"enum\u003cstring>[] | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.self.oneOf.1","typeLabel":"object"},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","isRequired":true,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.self.oneOf.2","typeLabel":"null"}],"isRequired":true,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.self","typeLabel":"object · object · null"},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.enabled_stats","typeLabel":"null"},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.stat_options","typeLabel":"null"},"properties":{"oneOf":[{"type":"array","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"},"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.properties.oneOf.0","typeLabel":"array"},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"},"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.properties.oneOf.1","typeLabel":"null"}],"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.properties","typeLabel":"array | null"},"items":{"oneOf":[{"description":"Configuration for the array item node.","uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.\\items.oneOf.0","typeLabel":"any"},{"type":"null","description":"Configuration for the array item node.","uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.\\items.oneOf.1","typeLabel":"null"}],"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.\\items","typeLabel":"any | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2","typeLabel":"object"},{"type":"object","description":"Configuration for the array item node of this array property.","required":["properties"],"properties":{"properties":{"oneOf":[{"type":"array","items":{"oneOf":[{}],"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.properties.oneOf.0.items.[INDEX]","typeLabel":"any"},"description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"isRequired":true,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.properties.oneOf.0","typeLabel":"any[]"},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"isRequired":true,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.properties.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.properties","typeLabel":"any[] | null"},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.enabled_stats","typeLabel":"null"},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.stat_options","typeLabel":"null"},"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.self.oneOf.0.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.self.oneOf.0.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.self.oneOf.0.enabled_stats.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.self.oneOf.0.enabled_stats","typeLabel":"enum\u003cstring>[] | null"},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.self.oneOf.0.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.self.oneOf.0.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.self.oneOf.0.stat_options.oneOf.0.histogram","typeLabel":"object"}},"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.self.oneOf.0.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.self.oneOf.0.stat_options.oneOf.1","typeLabel":"null"}],"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.self.oneOf.0.stat_options","typeLabel":"object | null"}},"additionalProperties":false,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.self.oneOf.0","typeLabel":"object"},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.self.oneOf.1.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.self.oneOf.1.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.self.oneOf.1.stat_options.oneOf.0.histogram","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.self.oneOf.1.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"isRequired":true,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.self.oneOf.1.stat_options.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.self.oneOf.1.stat_options","typeLabel":"object | null"},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.self.oneOf.1.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.self.oneOf.1.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.self.oneOf.1.enabled_stats.oneOf.1","typeLabel":"null"}],"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.self.oneOf.1.enabled_stats","typeLabel":"enum\u003cstring>[] | null"}},"additionalProperties":false,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.self.oneOf.1","typeLabel":"object"},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.self.oneOf.2","typeLabel":"null"}],"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.self","typeLabel":"object · object · null"},"items":{"oneOf":[{"description":"Configuration for the array item node.","uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.\\items.oneOf.0","typeLabel":"any"},{"type":"null","description":"Configuration for the array item node.","uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.\\items.oneOf.1","typeLabel":"null"}],"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.\\items","typeLabel":"any | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3","typeLabel":"object"},{"type":"object","description":"Configuration for the array item node of this array property.","required":["items"],"properties":{"items":{"oneOf":[{"description":"Configuration for the array item node.","isRequired":true,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.\\items.oneOf.0","typeLabel":"any"},{"type":"null","description":"Configuration for the array item node.","isRequired":true,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.\\items.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.\\items","typeLabel":"any | null"},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.enabled_stats","typeLabel":"null"},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.stat_options","typeLabel":"null"},"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.self.oneOf.0.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.self.oneOf.0.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.self.oneOf.0.enabled_stats.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.self.oneOf.0.enabled_stats","typeLabel":"enum\u003cstring>[] | null"},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.self.oneOf.0.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.self.oneOf.0.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.self.oneOf.0.stat_options.oneOf.0.histogram","typeLabel":"object"}},"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.self.oneOf.0.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.self.oneOf.0.stat_options.oneOf.1","typeLabel":"null"}],"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.self.oneOf.0.stat_options","typeLabel":"object | null"}},"additionalProperties":false,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.self.oneOf.0","typeLabel":"object"},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.self.oneOf.1.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.self.oneOf.1.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.self.oneOf.1.stat_options.oneOf.0.histogram","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.self.oneOf.1.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"isRequired":true,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.self.oneOf.1.stat_options.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.self.oneOf.1.stat_options","typeLabel":"object | null"},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.self.oneOf.1.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.self.oneOf.1.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.self.oneOf.1.enabled_stats.oneOf.1","typeLabel":"null"}],"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.self.oneOf.1.enabled_stats","typeLabel":"enum\u003cstring>[] | null"}},"additionalProperties":false,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.self.oneOf.1","typeLabel":"object"},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.self.oneOf.2","typeLabel":"null"}],"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.self","typeLabel":"object · object · null"},"properties":{"oneOf":[{"type":"array","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"},"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.properties.oneOf.0","typeLabel":"array"},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"},"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.properties.oneOf.1","typeLabel":"null"}],"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.properties","typeLabel":"array | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4","typeLabel":"object"},{"type":"null","description":"Configuration for the array item node of this array property.","isRequired":true,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.5","typeLabel":"null"}],"isRequired":true,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items","typeLabel":"object · object · object · object · object · null"},"path":{"type":"string","description":"Name of the child property relative to the parent object node. Must be a valid identifier (alphanumeric and underscores, max 256 chars).","maxLength":256,"pattern":"^[a-zA-Z0-9_]+$","isRequired":true,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.path","typeLabel":"string"},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.enabled_stats","typeLabel":"null"},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.stat_options","typeLabel":"null"},"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.self.oneOf.0.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.self.oneOf.0.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.self.oneOf.0.enabled_stats.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.self.oneOf.0.enabled_stats","typeLabel":"enum\u003cstring>[] | null"},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.self.oneOf.0.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.self.oneOf.0.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.self.oneOf.0.stat_options.oneOf.0.histogram","typeLabel":"object"}},"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.self.oneOf.0.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.self.oneOf.0.stat_options.oneOf.1","typeLabel":"null"}],"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.self.oneOf.0.stat_options","typeLabel":"object | null"}},"additionalProperties":false,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.self.oneOf.0","typeLabel":"object"},{"type":"object","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.self.oneOf.1.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.self.oneOf.1.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.self.oneOf.1.stat_options.oneOf.0.histogram","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.self.oneOf.1.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"isRequired":true,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.self.oneOf.1.stat_options.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.self.oneOf.1.stat_options","typeLabel":"object | null"},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.self.oneOf.1.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.self.oneOf.1.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.self.oneOf.1.enabled_stats.oneOf.1","typeLabel":"null"}],"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.self.oneOf.1.enabled_stats","typeLabel":"enum\u003cstring>[] | null"}},"additionalProperties":false,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.self.oneOf.1","typeLabel":"object"},{"type":"null","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.self.oneOf.2","typeLabel":"null"}],"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.self","typeLabel":"object · object · null"},"properties":{"oneOf":[{"type":"array","description":"Explicit configurations for named child properties of this object property. Only listed children receive stats — unlisted ones are skipped entirely.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"},"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.properties.oneOf.0","typeLabel":"array"},{"type":"null","description":"Explicit configurations for named child properties of this object property. Only listed children receive stats — unlisted ones are skipped entirely.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"},"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.properties.oneOf.1","typeLabel":"null"}],"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.properties","typeLabel":"array | null"}},"additionalProperties":false,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4","typeLabel":"object"}],"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX]","typeLabel":"object"},"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0","typeLabel":"object[]"},{"type":"null","description":"Explicit configurations for named child properties of an object field. Only listed children receive stats — unlisted ones are skipped entirely.","minItems":1,"items":{"oneOf":[{"type":"object","description":"Statistics configuration for a named property of an object node. The property may itself be primitive or non-primitive (recursive). A property must carry at least one configuration field — there is no no-op/inherited variant at the nested level. If a property is listed, it must specify what stats to compute. approx_count_distinct and count_distinct are mutually exclusive — the server rejects any request that includes both in the same enabled_stats array.","required":["path","enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"self":{"type":"null","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."},"properties":{"type":"null","description":"Explicit configurations for named child properties of this object property. Only listed children receive stats — unlisted ones are skipped entirely.","minItems":1},"items":{"type":"null","description":"Configuration for the array item node of this array property."},"path":{"type":"string","description":"Name of the child property relative to the parent object node. Must be a valid identifier (alphanumeric and underscores, max 256 chars).","maxLength":256,"pattern":"^[a-zA-Z0-9_]+$"},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Statistics configuration for a named property of an object node. The property may itself be primitive or non-primitive (recursive). A property must carry at least one configuration field — there is no no-op/inherited variant at the nested level. If a property is listed, it must specify what stats to compute. approx_count_distinct and count_distinct are mutually exclusive — the server rejects any request that includes both in the same enabled_stats array.","required":["path","stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"self":{"type":"null","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."},"properties":{"type":"null","description":"Explicit configurations for named child properties of this object property. Only listed children receive stats — unlisted ones are skipped entirely.","minItems":1},"items":{"type":"null","description":"Configuration for the array item node of this array property."},"path":{"type":"string","description":"Name of the child property relative to the parent object node. Must be a valid identifier (alphanumeric and underscores, max 256 chars).","maxLength":256,"pattern":"^[a-zA-Z0-9_]+$"},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"object","description":"Statistics configuration for a named property of an object node. The property may itself be primitive or non-primitive (recursive). A property must carry at least one configuration field — there is no no-op/inherited variant at the nested level. If a property is listed, it must specify what stats to compute. approx_count_distinct and count_distinct are mutually exclusive — the server rejects any request that includes both in the same enabled_stats array.","required":["path","self"],"properties":{"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"null","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."}]},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},"path":{"type":"string","description":"Name of the child property relative to the parent object node. Must be a valid identifier (alphanumeric and underscores, max 256 chars).","maxLength":256,"pattern":"^[a-zA-Z0-9_]+$"},"properties":{"oneOf":[{"type":"array","description":"Explicit configurations for named child properties of this object property. Only listed children receive stats — unlisted ones are skipped entirely.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}},{"type":"null","description":"Explicit configurations for named child properties of this object property. Only listed children receive stats — unlisted ones are skipped entirely.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}}]},"items":{"oneOf":[{"type":"object","description":"Configuration for the array item node of this array property.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"self":{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."},"properties":{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1},"items":{"oneOf":[{"type":"null","description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Configuration for the array item node of this array property.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"self":{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."},"properties":{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1},"items":{"oneOf":[{"type":"null","description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"object","description":"Configuration for the array item node of this array property.","required":["self"],"properties":{"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."}]},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},"properties":{"oneOf":[{"type":"array","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}}]},"items":{"oneOf":[{"description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]}},"additionalProperties":false},{"type":"object","description":"Configuration for the array item node of this array property.","required":["properties"],"properties":{"properties":{"oneOf":[{"type":"array","items":{"oneOf":[{}]},"description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1}]},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."}]},"items":{"oneOf":[{"description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]}},"additionalProperties":false},{"type":"object","description":"Configuration for the array item node of this array property.","required":["items"],"properties":{"items":{"oneOf":[{"description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."}]},"properties":{"oneOf":[{"type":"array","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}}]}},"additionalProperties":false},{"type":"null","description":"Configuration for the array item node of this array property."}]}},"additionalProperties":false},{"type":"object","description":"Statistics configuration for a named property of an object node. The property may itself be primitive or non-primitive (recursive). A property must carry at least one configuration field — there is no no-op/inherited variant at the nested level. If a property is listed, it must specify what stats to compute. approx_count_distinct and count_distinct are mutually exclusive — the server rejects any request that includes both in the same enabled_stats array.","required":["path","properties"],"properties":{"properties":{"oneOf":[{"type":"array","items":{"oneOf":[{}]},"description":"Explicit configurations for named child properties of this object property. Only listed children receive stats — unlisted ones are skipped entirely.","minItems":1},{"type":"null","description":"Explicit configurations for named child properties of this object property. Only listed children receive stats — unlisted ones are skipped entirely.","minItems":1}]},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},"path":{"type":"string","description":"Name of the child property relative to the parent object node. Must be a valid identifier (alphanumeric and underscores, max 256 chars).","maxLength":256,"pattern":"^[a-zA-Z0-9_]+$"},"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"null","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."}]},"items":{"oneOf":[{"type":"object","description":"Configuration for the array item node of this array property.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"self":{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."},"properties":{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1},"items":{"oneOf":[{"type":"null","description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Configuration for the array item node of this array property.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"self":{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."},"properties":{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1},"items":{"oneOf":[{"type":"null","description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"object","description":"Configuration for the array item node of this array property.","required":["self"],"properties":{"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."}]},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},"properties":{"oneOf":[{"type":"array","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}}]},"items":{"oneOf":[{"description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]}},"additionalProperties":false},{"type":"object","description":"Configuration for the array item node of this array property.","required":["properties"],"properties":{"properties":{"oneOf":[{"type":"array","items":{"oneOf":[{}]},"description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1}]},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."}]},"items":{"oneOf":[{"description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]}},"additionalProperties":false},{"type":"object","description":"Configuration for the array item node of this array property.","required":["items"],"properties":{"items":{"oneOf":[{"description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."}]},"properties":{"oneOf":[{"type":"array","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}}]}},"additionalProperties":false},{"type":"null","description":"Configuration for the array item node of this array property."}]}},"additionalProperties":false},{"type":"object","description":"Statistics configuration for a named property of an object node. The property may itself be primitive or non-primitive (recursive). A property must carry at least one configuration field — there is no no-op/inherited variant at the nested level. If a property is listed, it must specify what stats to compute. approx_count_distinct and count_distinct are mutually exclusive — the server rejects any request that includes both in the same enabled_stats array.","required":["path","items"],"properties":{"items":{"oneOf":[{"type":"object","description":"Configuration for the array item node of this array property.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"self":{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."},"properties":{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1},"items":{"oneOf":[{"type":"null","description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Configuration for the array item node of this array property.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"self":{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."},"properties":{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1},"items":{"oneOf":[{"type":"null","description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"object","description":"Configuration for the array item node of this array property.","required":["self"],"properties":{"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."}]},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},"properties":{"oneOf":[{"type":"array","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}}]},"items":{"oneOf":[{"description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]}},"additionalProperties":false},{"type":"object","description":"Configuration for the array item node of this array property.","required":["properties"],"properties":{"properties":{"oneOf":[{"type":"array","items":{"oneOf":[{}]},"description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1}]},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."}]},"items":{"oneOf":[{"description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]}},"additionalProperties":false},{"type":"object","description":"Configuration for the array item node of this array property.","required":["items"],"properties":{"items":{"oneOf":[{"description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."}]},"properties":{"oneOf":[{"type":"array","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}}]}},"additionalProperties":false},{"type":"null","description":"Configuration for the array item node of this array property."}]},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},"path":{"type":"string","description":"Name of the child property relative to the parent object node. Must be a valid identifier (alphanumeric and underscores, max 256 chars).","maxLength":256,"pattern":"^[a-zA-Z0-9_]+$"},"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"null","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."}]},"properties":{"oneOf":[{"type":"array","description":"Explicit configurations for named child properties of this object property. Only listed children receive stats — unlisted ones are skipped entirely.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}},{"type":"null","description":"Explicit configurations for named child properties of this object property. Only listed children receive stats — unlisted ones are skipped entirely.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}}]}},"additionalProperties":false}]},"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.1","typeLabel":"null"}],"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties","typeLabel":"object[] | null"},"items":{"oneOf":[{"type":"object","description":"Configuration for the array item node.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.0.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.0.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.0.enabled_stats.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.0.enabled_stats","typeLabel":"enum\u003cstring>[] | null"},"self":{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.0.self","typeLabel":"null"},"properties":{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.0.properties","typeLabel":"null"},"items":{"oneOf":[{"type":"null","description":"Configuration for the array item node.","uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.0.\\items.oneOf.0","typeLabel":"null"},{"type":"null","description":"Configuration for the array item node.","uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.0.\\items.oneOf.1","typeLabel":"null"}],"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.0.\\items","typeLabel":"null"},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.0.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.0.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.0.stat_options.oneOf.0.histogram","typeLabel":"object"}},"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.0.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.0.stat_options.oneOf.1","typeLabel":"null"}],"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.0.stat_options","typeLabel":"object | null"}},"additionalProperties":false,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.0","typeLabel":"object"},{"type":"object","description":"Configuration for the array item node.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.1.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.1.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.1.stat_options.oneOf.0.histogram","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.1.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"isRequired":true,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.1.stat_options.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.1.stat_options","typeLabel":"object | null"},"self":{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.1.self","typeLabel":"null"},"properties":{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.1.properties","typeLabel":"null"},"items":{"oneOf":[{"type":"null","description":"Configuration for the array item node.","uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.1.\\items.oneOf.0","typeLabel":"null"},{"type":"null","description":"Configuration for the array item node.","uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.1.\\items.oneOf.1","typeLabel":"null"}],"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.1.\\items","typeLabel":"null"},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.1.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.1.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.1.enabled_stats.oneOf.1","typeLabel":"null"}],"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.1.enabled_stats","typeLabel":"enum\u003cstring>[] | null"}},"additionalProperties":false,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.1","typeLabel":"object"},{"type":"object","description":"Configuration for the array item node.","required":["self"],"properties":{"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.self.oneOf.0.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.self.oneOf.0.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.self.oneOf.0.enabled_stats.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.self.oneOf.0.enabled_stats","typeLabel":"enum\u003cstring>[] | null"},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.self.oneOf.0.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.self.oneOf.0.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.self.oneOf.0.stat_options.oneOf.0.histogram","typeLabel":"object"}},"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.self.oneOf.0.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.self.oneOf.0.stat_options.oneOf.1","typeLabel":"null"}],"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.self.oneOf.0.stat_options","typeLabel":"object | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.self.oneOf.0","typeLabel":"object"},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.self.oneOf.1.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.self.oneOf.1.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.self.oneOf.1.stat_options.oneOf.0.histogram","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.self.oneOf.1.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"isRequired":true,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.self.oneOf.1.stat_options.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.self.oneOf.1.stat_options","typeLabel":"object | null"},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.self.oneOf.1.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.self.oneOf.1.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.self.oneOf.1.enabled_stats.oneOf.1","typeLabel":"null"}],"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.self.oneOf.1.enabled_stats","typeLabel":"enum\u003cstring>[] | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.self.oneOf.1","typeLabel":"object"},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","isRequired":true,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.self.oneOf.2","typeLabel":"null"}],"isRequired":true,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.self","typeLabel":"object · object · null"},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.enabled_stats","typeLabel":"null"},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.stat_options","typeLabel":"null"},"properties":{"oneOf":[{"type":"array","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"},"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.properties.oneOf.0","typeLabel":"array"},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"},"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.properties.oneOf.1","typeLabel":"null"}],"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.properties","typeLabel":"array | null"},"items":{"oneOf":[{"description":"Configuration for the array item node.","uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.\\items.oneOf.0","typeLabel":"any"},{"type":"null","description":"Configuration for the array item node.","uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.\\items.oneOf.1","typeLabel":"null"}],"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.\\items","typeLabel":"any | null"}},"additionalProperties":false,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.2","typeLabel":"object"},{"type":"object","description":"Configuration for the array item node.","required":["properties"],"properties":{"properties":{"oneOf":[{"type":"array","items":{"oneOf":[{}],"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.properties.oneOf.0.items.[INDEX]","typeLabel":"any"},"description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"isRequired":true,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.properties.oneOf.0","typeLabel":"any[]"},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"isRequired":true,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.properties.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.properties","typeLabel":"any[] | null"},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.enabled_stats","typeLabel":"null"},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.stat_options","typeLabel":"null"},"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.self.oneOf.0.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.self.oneOf.0.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.self.oneOf.0.enabled_stats.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.self.oneOf.0.enabled_stats","typeLabel":"enum\u003cstring>[] | null"},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.self.oneOf.0.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.self.oneOf.0.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.self.oneOf.0.stat_options.oneOf.0.histogram","typeLabel":"object"}},"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.self.oneOf.0.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.self.oneOf.0.stat_options.oneOf.1","typeLabel":"null"}],"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.self.oneOf.0.stat_options","typeLabel":"object | null"}},"additionalProperties":false,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.self.oneOf.0","typeLabel":"object"},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.self.oneOf.1.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.self.oneOf.1.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.self.oneOf.1.stat_options.oneOf.0.histogram","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.self.oneOf.1.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"isRequired":true,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.self.oneOf.1.stat_options.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.self.oneOf.1.stat_options","typeLabel":"object | null"},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.self.oneOf.1.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.self.oneOf.1.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.self.oneOf.1.enabled_stats.oneOf.1","typeLabel":"null"}],"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.self.oneOf.1.enabled_stats","typeLabel":"enum\u003cstring>[] | null"}},"additionalProperties":false,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.self.oneOf.1","typeLabel":"object"},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.self.oneOf.2","typeLabel":"null"}],"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.self","typeLabel":"object · object · null"},"items":{"oneOf":[{"description":"Configuration for the array item node.","uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.\\items.oneOf.0","typeLabel":"any"},{"type":"null","description":"Configuration for the array item node.","uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.\\items.oneOf.1","typeLabel":"null"}],"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.\\items","typeLabel":"any | null"}},"additionalProperties":false,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.3","typeLabel":"object"},{"type":"object","description":"Configuration for the array item node.","required":["items"],"properties":{"items":{"oneOf":[{"description":"Configuration for the array item node.","isRequired":true,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.\\items.oneOf.0","typeLabel":"any"},{"type":"null","description":"Configuration for the array item node.","isRequired":true,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.\\items.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.\\items","typeLabel":"any | null"},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.enabled_stats","typeLabel":"null"},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.stat_options","typeLabel":"null"},"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.self.oneOf.0.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.self.oneOf.0.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.self.oneOf.0.enabled_stats.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.self.oneOf.0.enabled_stats","typeLabel":"enum\u003cstring>[] | null"},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.self.oneOf.0.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.self.oneOf.0.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.self.oneOf.0.stat_options.oneOf.0.histogram","typeLabel":"object"}},"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.self.oneOf.0.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.self.oneOf.0.stat_options.oneOf.1","typeLabel":"null"}],"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.self.oneOf.0.stat_options","typeLabel":"object | null"}},"additionalProperties":false,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.self.oneOf.0","typeLabel":"object"},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.self.oneOf.1.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.self.oneOf.1.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.self.oneOf.1.stat_options.oneOf.0.histogram","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.self.oneOf.1.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"isRequired":true,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.self.oneOf.1.stat_options.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.self.oneOf.1.stat_options","typeLabel":"object | null"},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.self.oneOf.1.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.self.oneOf.1.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.self.oneOf.1.enabled_stats.oneOf.1","typeLabel":"null"}],"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.self.oneOf.1.enabled_stats","typeLabel":"enum\u003cstring>[] | null"}},"additionalProperties":false,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.self.oneOf.1","typeLabel":"object"},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.self.oneOf.2","typeLabel":"null"}],"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.self","typeLabel":"object · object · null"},"properties":{"oneOf":[{"type":"array","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"},"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.properties.oneOf.0","typeLabel":"array"},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"},"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.properties.oneOf.1","typeLabel":"null"}],"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.properties","typeLabel":"array | null"}},"additionalProperties":false,"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.4","typeLabel":"object"},{"type":"null","description":"Configuration for the array item node.","uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.5","typeLabel":"null"}],"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items","typeLabel":"object · object · object · object · object · null"}},"uniqueKey":"dataset.oneOf.0.fields.oneOf.0.items.[INDEX]","typeLabel":"object"},"uniqueKey":"dataset.oneOf.0.fields.oneOf.0","typeLabel":"object[]"},{"type":"null","description":"Per-field overrides for individual dataset columns.","items":{"type":"object","description":"Common stat configuration shared by dataset and Rosetta Stone field configs. Exactly one of three modes must be used (the server rejects invalid combinations):\n\n1. **Primitive field** — provide enabled_stats and/or stat_options at the top level.\n Must not include self, properties, or items.\n\n2. **Non-primitive field** — provide self, properties, and/or items for nested structure.\n Must not include enabled_stats or stat_options at this level;\n use self for node-level stat configuration instead.\n\n3. **No-op / inherit** — leave all stat fields null or absent. The field inherits its\n configuration from the namespace scope or global defaults.\n\n\nThis schema deliberately has no `oneOf` over the three modes. Mode 3 is all five slots null, which matches neither of the other two, so a closed union here would reject it.\nClosing this schema is left to the two that compose it. `additionalProperties: false` here would only see the properties below, so it would reject the `field_name` and `attribute_name` its siblings contribute; `DatasetFieldConfig` and `RosettaStoneFieldConfig` use `unevaluatedProperties: false`, which sees the whole composition.","required":["field_name"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]},"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive field node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Statistics for the non-primitive field node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"null","description":"Statistics for the non-primitive field node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."}]},"properties":{"oneOf":[{"type":"array","description":"Explicit configurations for named child properties of an object field. Only listed children receive stats — unlisted ones are skipped entirely.","minItems":1,"items":{"oneOf":[{"type":"object","description":"Statistics configuration for a named property of an object node. The property may itself be primitive or non-primitive (recursive). A property must carry at least one configuration field — there is no no-op/inherited variant at the nested level. If a property is listed, it must specify what stats to compute. approx_count_distinct and count_distinct are mutually exclusive — the server rejects any request that includes both in the same enabled_stats array.","required":["path","enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"self":{"type":"null","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."},"properties":{"type":"null","description":"Explicit configurations for named child properties of this object property. Only listed children receive stats — unlisted ones are skipped entirely.","minItems":1},"items":{"type":"null","description":"Configuration for the array item node of this array property."},"path":{"type":"string","description":"Name of the child property relative to the parent object node. Must be a valid identifier (alphanumeric and underscores, max 256 chars).","maxLength":256,"pattern":"^[a-zA-Z0-9_]+$"},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Statistics configuration for a named property of an object node. The property may itself be primitive or non-primitive (recursive). A property must carry at least one configuration field — there is no no-op/inherited variant at the nested level. If a property is listed, it must specify what stats to compute. approx_count_distinct and count_distinct are mutually exclusive — the server rejects any request that includes both in the same enabled_stats array.","required":["path","stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"self":{"type":"null","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."},"properties":{"type":"null","description":"Explicit configurations for named child properties of this object property. Only listed children receive stats — unlisted ones are skipped entirely.","minItems":1},"items":{"type":"null","description":"Configuration for the array item node of this array property."},"path":{"type":"string","description":"Name of the child property relative to the parent object node. Must be a valid identifier (alphanumeric and underscores, max 256 chars).","maxLength":256,"pattern":"^[a-zA-Z0-9_]+$"},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"object","description":"Statistics configuration for a named property of an object node. The property may itself be primitive or non-primitive (recursive). A property must carry at least one configuration field — there is no no-op/inherited variant at the nested level. If a property is listed, it must specify what stats to compute. approx_count_distinct and count_distinct are mutually exclusive — the server rejects any request that includes both in the same enabled_stats array.","required":["path","self"],"properties":{"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"null","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."}]},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},"path":{"type":"string","description":"Name of the child property relative to the parent object node. Must be a valid identifier (alphanumeric and underscores, max 256 chars).","maxLength":256,"pattern":"^[a-zA-Z0-9_]+$"},"properties":{"oneOf":[{"type":"array","description":"Explicit configurations for named child properties of this object property. Only listed children receive stats — unlisted ones are skipped entirely.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}},{"type":"null","description":"Explicit configurations for named child properties of this object property. Only listed children receive stats — unlisted ones are skipped entirely.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}}]},"items":{"oneOf":[{"type":"object","description":"Configuration for the array item node of this array property.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"self":{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."},"properties":{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1},"items":{"oneOf":[{"type":"null","description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Configuration for the array item node of this array property.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"self":{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."},"properties":{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1},"items":{"oneOf":[{"type":"null","description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"object","description":"Configuration for the array item node of this array property.","required":["self"],"properties":{"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."}]},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},"properties":{"oneOf":[{"type":"array","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}}]},"items":{"oneOf":[{"description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]}},"additionalProperties":false},{"type":"object","description":"Configuration for the array item node of this array property.","required":["properties"],"properties":{"properties":{"oneOf":[{"type":"array","items":{"oneOf":[{}]},"description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1}]},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."}]},"items":{"oneOf":[{"description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]}},"additionalProperties":false},{"type":"object","description":"Configuration for the array item node of this array property.","required":["items"],"properties":{"items":{"oneOf":[{"description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."}]},"properties":{"oneOf":[{"type":"array","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}}]}},"additionalProperties":false},{"type":"null","description":"Configuration for the array item node of this array property."}]}},"additionalProperties":false},{"type":"object","description":"Statistics configuration for a named property of an object node. The property may itself be primitive or non-primitive (recursive). A property must carry at least one configuration field — there is no no-op/inherited variant at the nested level. If a property is listed, it must specify what stats to compute. approx_count_distinct and count_distinct are mutually exclusive — the server rejects any request that includes both in the same enabled_stats array.","required":["path","properties"],"properties":{"properties":{"oneOf":[{"type":"array","items":{"oneOf":[{}]},"description":"Explicit configurations for named child properties of this object property. Only listed children receive stats — unlisted ones are skipped entirely.","minItems":1},{"type":"null","description":"Explicit configurations for named child properties of this object property. Only listed children receive stats — unlisted ones are skipped entirely.","minItems":1}]},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},"path":{"type":"string","description":"Name of the child property relative to the parent object node. Must be a valid identifier (alphanumeric and underscores, max 256 chars).","maxLength":256,"pattern":"^[a-zA-Z0-9_]+$"},"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"null","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."}]},"items":{"oneOf":[{"type":"object","description":"Configuration for the array item node of this array property.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"self":{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."},"properties":{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1},"items":{"oneOf":[{"type":"null","description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Configuration for the array item node of this array property.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"self":{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."},"properties":{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1},"items":{"oneOf":[{"type":"null","description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"object","description":"Configuration for the array item node of this array property.","required":["self"],"properties":{"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."}]},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},"properties":{"oneOf":[{"type":"array","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}}]},"items":{"oneOf":[{"description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]}},"additionalProperties":false},{"type":"object","description":"Configuration for the array item node of this array property.","required":["properties"],"properties":{"properties":{"oneOf":[{"type":"array","items":{"oneOf":[{}]},"description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1}]},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."}]},"items":{"oneOf":[{"description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]}},"additionalProperties":false},{"type":"object","description":"Configuration for the array item node of this array property.","required":["items"],"properties":{"items":{"oneOf":[{"description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."}]},"properties":{"oneOf":[{"type":"array","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}}]}},"additionalProperties":false},{"type":"null","description":"Configuration for the array item node of this array property."}]}},"additionalProperties":false},{"type":"object","description":"Statistics configuration for a named property of an object node. The property may itself be primitive or non-primitive (recursive). A property must carry at least one configuration field — there is no no-op/inherited variant at the nested level. If a property is listed, it must specify what stats to compute. approx_count_distinct and count_distinct are mutually exclusive — the server rejects any request that includes both in the same enabled_stats array.","required":["path","items"],"properties":{"items":{"oneOf":[{"type":"object","description":"Configuration for the array item node of this array property.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"self":{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."},"properties":{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1},"items":{"oneOf":[{"type":"null","description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Configuration for the array item node of this array property.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"self":{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."},"properties":{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1},"items":{"oneOf":[{"type":"null","description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"object","description":"Configuration for the array item node of this array property.","required":["self"],"properties":{"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."}]},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},"properties":{"oneOf":[{"type":"array","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}}]},"items":{"oneOf":[{"description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]}},"additionalProperties":false},{"type":"object","description":"Configuration for the array item node of this array property.","required":["properties"],"properties":{"properties":{"oneOf":[{"type":"array","items":{"oneOf":[{}]},"description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1}]},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."}]},"items":{"oneOf":[{"description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]}},"additionalProperties":false},{"type":"object","description":"Configuration for the array item node of this array property.","required":["items"],"properties":{"items":{"oneOf":[{"description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."}]},"properties":{"oneOf":[{"type":"array","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}}]}},"additionalProperties":false},{"type":"null","description":"Configuration for the array item node of this array property."}]},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},"path":{"type":"string","description":"Name of the child property relative to the parent object node. Must be a valid identifier (alphanumeric and underscores, max 256 chars).","maxLength":256,"pattern":"^[a-zA-Z0-9_]+$"},"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"null","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."}]},"properties":{"oneOf":[{"type":"array","description":"Explicit configurations for named child properties of this object property. Only listed children receive stats — unlisted ones are skipped entirely.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}},{"type":"null","description":"Explicit configurations for named child properties of this object property. Only listed children receive stats — unlisted ones are skipped entirely.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}}]}},"additionalProperties":false}]}},{"type":"null","description":"Explicit configurations for named child properties of an object field. Only listed children receive stats — unlisted ones are skipped entirely.","minItems":1,"items":{"oneOf":[{"type":"object","description":"Statistics configuration for a named property of an object node. The property may itself be primitive or non-primitive (recursive). A property must carry at least one configuration field — there is no no-op/inherited variant at the nested level. If a property is listed, it must specify what stats to compute. approx_count_distinct and count_distinct are mutually exclusive — the server rejects any request that includes both in the same enabled_stats array.","required":["path","enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"self":{"type":"null","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."},"properties":{"type":"null","description":"Explicit configurations for named child properties of this object property. Only listed children receive stats — unlisted ones are skipped entirely.","minItems":1},"items":{"type":"null","description":"Configuration for the array item node of this array property."},"path":{"type":"string","description":"Name of the child property relative to the parent object node. Must be a valid identifier (alphanumeric and underscores, max 256 chars).","maxLength":256,"pattern":"^[a-zA-Z0-9_]+$"},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Statistics configuration for a named property of an object node. The property may itself be primitive or non-primitive (recursive). A property must carry at least one configuration field — there is no no-op/inherited variant at the nested level. If a property is listed, it must specify what stats to compute. approx_count_distinct and count_distinct are mutually exclusive — the server rejects any request that includes both in the same enabled_stats array.","required":["path","stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"self":{"type":"null","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."},"properties":{"type":"null","description":"Explicit configurations for named child properties of this object property. Only listed children receive stats — unlisted ones are skipped entirely.","minItems":1},"items":{"type":"null","description":"Configuration for the array item node of this array property."},"path":{"type":"string","description":"Name of the child property relative to the parent object node. Must be a valid identifier (alphanumeric and underscores, max 256 chars).","maxLength":256,"pattern":"^[a-zA-Z0-9_]+$"},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"object","description":"Statistics configuration for a named property of an object node. The property may itself be primitive or non-primitive (recursive). A property must carry at least one configuration field — there is no no-op/inherited variant at the nested level. If a property is listed, it must specify what stats to compute. approx_count_distinct and count_distinct are mutually exclusive — the server rejects any request that includes both in the same enabled_stats array.","required":["path","self"],"properties":{"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"null","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."}]},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},"path":{"type":"string","description":"Name of the child property relative to the parent object node. Must be a valid identifier (alphanumeric and underscores, max 256 chars).","maxLength":256,"pattern":"^[a-zA-Z0-9_]+$"},"properties":{"oneOf":[{"type":"array","description":"Explicit configurations for named child properties of this object property. Only listed children receive stats — unlisted ones are skipped entirely.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}},{"type":"null","description":"Explicit configurations for named child properties of this object property. Only listed children receive stats — unlisted ones are skipped entirely.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}}]},"items":{"oneOf":[{"type":"object","description":"Configuration for the array item node of this array property.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"self":{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."},"properties":{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1},"items":{"oneOf":[{"type":"null","description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Configuration for the array item node of this array property.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"self":{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."},"properties":{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1},"items":{"oneOf":[{"type":"null","description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"object","description":"Configuration for the array item node of this array property.","required":["self"],"properties":{"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."}]},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},"properties":{"oneOf":[{"type":"array","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}}]},"items":{"oneOf":[{"description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]}},"additionalProperties":false},{"type":"object","description":"Configuration for the array item node of this array property.","required":["properties"],"properties":{"properties":{"oneOf":[{"type":"array","items":{"oneOf":[{}]},"description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1}]},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."}]},"items":{"oneOf":[{"description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]}},"additionalProperties":false},{"type":"object","description":"Configuration for the array item node of this array property.","required":["items"],"properties":{"items":{"oneOf":[{"description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."}]},"properties":{"oneOf":[{"type":"array","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}}]}},"additionalProperties":false},{"type":"null","description":"Configuration for the array item node of this array property."}]}},"additionalProperties":false},{"type":"object","description":"Statistics configuration for a named property of an object node. The property may itself be primitive or non-primitive (recursive). A property must carry at least one configuration field — there is no no-op/inherited variant at the nested level. If a property is listed, it must specify what stats to compute. approx_count_distinct and count_distinct are mutually exclusive — the server rejects any request that includes both in the same enabled_stats array.","required":["path","properties"],"properties":{"properties":{"oneOf":[{"type":"array","items":{"oneOf":[{}]},"description":"Explicit configurations for named child properties of this object property. Only listed children receive stats — unlisted ones are skipped entirely.","minItems":1},{"type":"null","description":"Explicit configurations for named child properties of this object property. Only listed children receive stats — unlisted ones are skipped entirely.","minItems":1}]},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},"path":{"type":"string","description":"Name of the child property relative to the parent object node. Must be a valid identifier (alphanumeric and underscores, max 256 chars).","maxLength":256,"pattern":"^[a-zA-Z0-9_]+$"},"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"null","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."}]},"items":{"oneOf":[{"type":"object","description":"Configuration for the array item node of this array property.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"self":{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."},"properties":{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1},"items":{"oneOf":[{"type":"null","description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Configuration for the array item node of this array property.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"self":{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."},"properties":{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1},"items":{"oneOf":[{"type":"null","description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"object","description":"Configuration for the array item node of this array property.","required":["self"],"properties":{"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."}]},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},"properties":{"oneOf":[{"type":"array","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}}]},"items":{"oneOf":[{"description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]}},"additionalProperties":false},{"type":"object","description":"Configuration for the array item node of this array property.","required":["properties"],"properties":{"properties":{"oneOf":[{"type":"array","items":{"oneOf":[{}]},"description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1}]},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."}]},"items":{"oneOf":[{"description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]}},"additionalProperties":false},{"type":"object","description":"Configuration for the array item node of this array property.","required":["items"],"properties":{"items":{"oneOf":[{"description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."}]},"properties":{"oneOf":[{"type":"array","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}}]}},"additionalProperties":false},{"type":"null","description":"Configuration for the array item node of this array property."}]}},"additionalProperties":false},{"type":"object","description":"Statistics configuration for a named property of an object node. The property may itself be primitive or non-primitive (recursive). A property must carry at least one configuration field — there is no no-op/inherited variant at the nested level. If a property is listed, it must specify what stats to compute. approx_count_distinct and count_distinct are mutually exclusive — the server rejects any request that includes both in the same enabled_stats array.","required":["path","items"],"properties":{"items":{"oneOf":[{"type":"object","description":"Configuration for the array item node of this array property.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"self":{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."},"properties":{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1},"items":{"oneOf":[{"type":"null","description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Configuration for the array item node of this array property.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"self":{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."},"properties":{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1},"items":{"oneOf":[{"type":"null","description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"object","description":"Configuration for the array item node of this array property.","required":["self"],"properties":{"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."}]},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},"properties":{"oneOf":[{"type":"array","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}}]},"items":{"oneOf":[{"description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]}},"additionalProperties":false},{"type":"object","description":"Configuration for the array item node of this array property.","required":["properties"],"properties":{"properties":{"oneOf":[{"type":"array","items":{"oneOf":[{}]},"description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1}]},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."}]},"items":{"oneOf":[{"description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]}},"additionalProperties":false},{"type":"object","description":"Configuration for the array item node of this array property.","required":["items"],"properties":{"items":{"oneOf":[{"description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."}]},"properties":{"oneOf":[{"type":"array","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}}]}},"additionalProperties":false},{"type":"null","description":"Configuration for the array item node of this array property."}]},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},"path":{"type":"string","description":"Name of the child property relative to the parent object node. Must be a valid identifier (alphanumeric and underscores, max 256 chars).","maxLength":256,"pattern":"^[a-zA-Z0-9_]+$"},"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"null","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."}]},"properties":{"oneOf":[{"type":"array","description":"Explicit configurations for named child properties of this object property. Only listed children receive stats — unlisted ones are skipped entirely.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}},{"type":"null","description":"Explicit configurations for named child properties of this object property. Only listed children receive stats — unlisted ones are skipped entirely.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}}]}},"additionalProperties":false}]}}]},"items":{"oneOf":[{"type":"object","description":"Configuration for the array item node.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"self":{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."},"properties":{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1},"items":{"oneOf":[{"type":"null","description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Configuration for the array item node.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"self":{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."},"properties":{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1},"items":{"oneOf":[{"type":"null","description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"object","description":"Configuration for the array item node.","required":["self"],"properties":{"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."}]},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},"properties":{"oneOf":[{"type":"array","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}}]},"items":{"oneOf":[{"description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]}},"additionalProperties":false},{"type":"object","description":"Configuration for the array item node.","required":["properties"],"properties":{"properties":{"oneOf":[{"type":"array","items":{"oneOf":[{}]},"description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1}]},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."}]},"items":{"oneOf":[{"description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]}},"additionalProperties":false},{"type":"object","description":"Configuration for the array item node.","required":["items"],"properties":{"items":{"oneOf":[{"description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."}]},"properties":{"oneOf":[{"type":"array","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}}]}},"additionalProperties":false},{"type":"null","description":"Configuration for the array item node."}]},"field_name":{"type":"string","description":"The column name as defined in the dataset schema. Must be a valid identifier (alphanumeric and underscores, max 256 chars).","maxLength":256,"pattern":"^[a-zA-Z0-9_]+$"}}},"uniqueKey":"dataset.oneOf.0.fields.oneOf.1","typeLabel":"null"}],"uniqueKey":"dataset.oneOf.0.fields","typeLabel":"object[] | null"}},"additionalProperties":false,"uniqueKey":"dataset.oneOf.0","typeLabel":"object"},{"type":"object","description":"Configuration for dataset schema columns. Use 'scope' to override defaults for all dataset fields, or to disable the namespace entirely via enabled_stats: []. Use 'fields' for per-field overrides. Null when the config does not touch this namespace.","required":["fields"],"properties":{"fields":{"oneOf":[{"type":"array","items":{"type":"object","description":"Common stat configuration shared by dataset and Rosetta Stone field configs. Exactly one of three modes must be used (the server rejects invalid combinations):\n\n1. **Primitive field** — provide enabled_stats and/or stat_options at the top level.\n Must not include self, properties, or items.\n\n2. **Non-primitive field** — provide self, properties, and/or items for nested structure.\n Must not include enabled_stats or stat_options at this level;\n use self for node-level stat configuration instead.\n\n3. **No-op / inherit** — leave all stat fields null or absent. The field inherits its\n configuration from the namespace scope or global defaults.\n\n\nThis schema deliberately has no `oneOf` over the three modes. Mode 3 is all five slots null, which matches neither of the other two, so a closed union here would reject it.\nClosing this schema is left to the two that compose it. `additionalProperties: false` here would only see the properties below, so it would reject the `field_name` and `attribute_name` its siblings contribute; `DatasetFieldConfig` and `RosettaStoneFieldConfig` use `unevaluatedProperties: false`, which sees the whole composition.","required":["field_name"],"properties":{"field_name":{"type":"string","description":"The column name as defined in the dataset schema. Must be a valid identifier (alphanumeric and underscores, max 256 chars).","maxLength":256,"pattern":"^[a-zA-Z0-9_]+$","isRequired":true,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].field_name","typeLabel":"string"},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].enabled_stats.oneOf.1","typeLabel":"null"}],"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].enabled_stats","typeLabel":"enum\u003cstring>[] | null"},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].stat_options.oneOf.0.histogram","typeLabel":"object"}},"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].stat_options.oneOf.1","typeLabel":"null"}],"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].stat_options","typeLabel":"object | null"},"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive field node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].self.oneOf.0.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].self.oneOf.0.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].self.oneOf.0.enabled_stats.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].self.oneOf.0.enabled_stats","typeLabel":"enum\u003cstring>[] | null"},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].self.oneOf.0.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].self.oneOf.0.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].self.oneOf.0.stat_options.oneOf.0.histogram","typeLabel":"object"}},"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].self.oneOf.0.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].self.oneOf.0.stat_options.oneOf.1","typeLabel":"null"}],"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].self.oneOf.0.stat_options","typeLabel":"object | null"}},"additionalProperties":false,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].self.oneOf.0","typeLabel":"object"},{"type":"object","description":"Statistics for the non-primitive field node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].self.oneOf.1.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].self.oneOf.1.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].self.oneOf.1.stat_options.oneOf.0.histogram","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].self.oneOf.1.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"isRequired":true,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].self.oneOf.1.stat_options.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].self.oneOf.1.stat_options","typeLabel":"object | null"},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].self.oneOf.1.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].self.oneOf.1.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].self.oneOf.1.enabled_stats.oneOf.1","typeLabel":"null"}],"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].self.oneOf.1.enabled_stats","typeLabel":"enum\u003cstring>[] | null"}},"additionalProperties":false,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].self.oneOf.1","typeLabel":"object"},{"type":"null","description":"Statistics for the non-primitive field node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].self.oneOf.2","typeLabel":"null"}],"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].self","typeLabel":"object · object · null"},"properties":{"oneOf":[{"type":"array","description":"Explicit configurations for named child properties of an object field. Only listed children receive stats — unlisted ones are skipped entirely.","minItems":1,"items":{"oneOf":[{"type":"object","description":"Statistics configuration for a named property of an object node. The property may itself be primitive or non-primitive (recursive). A property must carry at least one configuration field — there is no no-op/inherited variant at the nested level. If a property is listed, it must specify what stats to compute. approx_count_distinct and count_distinct are mutually exclusive — the server rejects any request that includes both in the same enabled_stats array.","required":["path","enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.0.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.0.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.0.enabled_stats.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.0.enabled_stats","typeLabel":"enum\u003cstring>[] | null"},"path":{"type":"string","description":"Name of the child property relative to the parent object node. Must be a valid identifier (alphanumeric and underscores, max 256 chars).","maxLength":256,"pattern":"^[a-zA-Z0-9_]+$","isRequired":true,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.0.path","typeLabel":"string"},"self":{"type":"null","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.0.self","typeLabel":"null"},"properties":{"type":"null","description":"Explicit configurations for named child properties of this object property. Only listed children receive stats — unlisted ones are skipped entirely.","minItems":1,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.0.properties","typeLabel":"null"},"items":{"type":"null","description":"Configuration for the array item node of this array property.","uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.0.\\items","typeLabel":"null"},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.0.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.0.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.0.stat_options.oneOf.0.histogram","typeLabel":"object"}},"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.0.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.0.stat_options.oneOf.1","typeLabel":"null"}],"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.0.stat_options","typeLabel":"object | null"}},"additionalProperties":false,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.0","typeLabel":"object"},{"type":"object","description":"Statistics configuration for a named property of an object node. The property may itself be primitive or non-primitive (recursive). A property must carry at least one configuration field — there is no no-op/inherited variant at the nested level. If a property is listed, it must specify what stats to compute. approx_count_distinct and count_distinct are mutually exclusive — the server rejects any request that includes both in the same enabled_stats array.","required":["path","stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.1.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.1.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.1.stat_options.oneOf.0.histogram","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.1.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"isRequired":true,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.1.stat_options.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.1.stat_options","typeLabel":"object | null"},"path":{"type":"string","description":"Name of the child property relative to the parent object node. Must be a valid identifier (alphanumeric and underscores, max 256 chars).","maxLength":256,"pattern":"^[a-zA-Z0-9_]+$","isRequired":true,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.1.path","typeLabel":"string"},"self":{"type":"null","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.1.self","typeLabel":"null"},"properties":{"type":"null","description":"Explicit configurations for named child properties of this object property. Only listed children receive stats — unlisted ones are skipped entirely.","minItems":1,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.1.properties","typeLabel":"null"},"items":{"type":"null","description":"Configuration for the array item node of this array property.","uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.1.\\items","typeLabel":"null"},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.1.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.1.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.1.enabled_stats.oneOf.1","typeLabel":"null"}],"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.1.enabled_stats","typeLabel":"enum\u003cstring>[] | null"}},"additionalProperties":false,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.1","typeLabel":"object"},{"type":"object","description":"Statistics configuration for a named property of an object node. The property may itself be primitive or non-primitive (recursive). A property must carry at least one configuration field — there is no no-op/inherited variant at the nested level. If a property is listed, it must specify what stats to compute. approx_count_distinct and count_distinct are mutually exclusive — the server rejects any request that includes both in the same enabled_stats array.","required":["path","self"],"properties":{"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.self.oneOf.0.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.self.oneOf.0.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.self.oneOf.0.enabled_stats.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.self.oneOf.0.enabled_stats","typeLabel":"enum\u003cstring>[] | null"},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.self.oneOf.0.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.self.oneOf.0.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.self.oneOf.0.stat_options.oneOf.0.histogram","typeLabel":"object"}},"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.self.oneOf.0.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.self.oneOf.0.stat_options.oneOf.1","typeLabel":"null"}],"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.self.oneOf.0.stat_options","typeLabel":"object | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.self.oneOf.0","typeLabel":"object"},{"type":"object","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.self.oneOf.1.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.self.oneOf.1.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.self.oneOf.1.stat_options.oneOf.0.histogram","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.self.oneOf.1.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"isRequired":true,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.self.oneOf.1.stat_options.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.self.oneOf.1.stat_options","typeLabel":"object | null"},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.self.oneOf.1.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.self.oneOf.1.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.self.oneOf.1.enabled_stats.oneOf.1","typeLabel":"null"}],"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.self.oneOf.1.enabled_stats","typeLabel":"enum\u003cstring>[] | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.self.oneOf.1","typeLabel":"object"},{"type":"null","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","isRequired":true,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.self.oneOf.2","typeLabel":"null"}],"isRequired":true,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.self","typeLabel":"object · object · null"},"path":{"type":"string","description":"Name of the child property relative to the parent object node. Must be a valid identifier (alphanumeric and underscores, max 256 chars).","maxLength":256,"pattern":"^[a-zA-Z0-9_]+$","isRequired":true,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.path","typeLabel":"string"},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.enabled_stats","typeLabel":"null"},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.stat_options","typeLabel":"null"},"properties":{"oneOf":[{"type":"array","description":"Explicit configurations for named child properties of this object property. Only listed children receive stats — unlisted ones are skipped entirely.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"},"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.properties.oneOf.0","typeLabel":"array"},{"type":"null","description":"Explicit configurations for named child properties of this object property. Only listed children receive stats — unlisted ones are skipped entirely.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"},"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.properties.oneOf.1","typeLabel":"null"}],"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.properties","typeLabel":"array | null"},"items":{"oneOf":[{"type":"object","description":"Configuration for the array item node of this array property.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.0.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.0.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.0.enabled_stats.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.0.enabled_stats","typeLabel":"enum\u003cstring>[] | null"},"self":{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.0.self","typeLabel":"null"},"properties":{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.0.properties","typeLabel":"null"},"items":{"oneOf":[{"type":"null","description":"Configuration for the array item node.","uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.0.\\items.oneOf.0","typeLabel":"null"},{"type":"null","description":"Configuration for the array item node.","uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.0.\\items.oneOf.1","typeLabel":"null"}],"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.0.\\items","typeLabel":"null"},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.0.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.0.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.0.stat_options.oneOf.0.histogram","typeLabel":"object"}},"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.0.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.0.stat_options.oneOf.1","typeLabel":"null"}],"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.0.stat_options","typeLabel":"object | null"}},"additionalProperties":false,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.0","typeLabel":"object"},{"type":"object","description":"Configuration for the array item node of this array property.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.1.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.1.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.1.stat_options.oneOf.0.histogram","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.1.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"isRequired":true,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.1.stat_options.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.1.stat_options","typeLabel":"object | null"},"self":{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.1.self","typeLabel":"null"},"properties":{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.1.properties","typeLabel":"null"},"items":{"oneOf":[{"type":"null","description":"Configuration for the array item node.","uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.1.\\items.oneOf.0","typeLabel":"null"},{"type":"null","description":"Configuration for the array item node.","uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.1.\\items.oneOf.1","typeLabel":"null"}],"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.1.\\items","typeLabel":"null"},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.1.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.1.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.1.enabled_stats.oneOf.1","typeLabel":"null"}],"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.1.enabled_stats","typeLabel":"enum\u003cstring>[] | null"}},"additionalProperties":false,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.1","typeLabel":"object"},{"type":"object","description":"Configuration for the array item node of this array property.","required":["self"],"properties":{"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.self.oneOf.0.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.self.oneOf.0.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.self.oneOf.0.enabled_stats.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.self.oneOf.0.enabled_stats","typeLabel":"enum\u003cstring>[] | null"},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.self.oneOf.0.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.self.oneOf.0.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.self.oneOf.0.stat_options.oneOf.0.histogram","typeLabel":"object"}},"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.self.oneOf.0.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.self.oneOf.0.stat_options.oneOf.1","typeLabel":"null"}],"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.self.oneOf.0.stat_options","typeLabel":"object | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.self.oneOf.0","typeLabel":"object"},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.self.oneOf.1.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.self.oneOf.1.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.self.oneOf.1.stat_options.oneOf.0.histogram","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.self.oneOf.1.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"isRequired":true,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.self.oneOf.1.stat_options.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.self.oneOf.1.stat_options","typeLabel":"object | null"},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.self.oneOf.1.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.self.oneOf.1.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.self.oneOf.1.enabled_stats.oneOf.1","typeLabel":"null"}],"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.self.oneOf.1.enabled_stats","typeLabel":"enum\u003cstring>[] | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.self.oneOf.1","typeLabel":"object"},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","isRequired":true,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.self.oneOf.2","typeLabel":"null"}],"isRequired":true,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.self","typeLabel":"object · object · null"},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.enabled_stats","typeLabel":"null"},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.stat_options","typeLabel":"null"},"properties":{"oneOf":[{"type":"array","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"},"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.properties.oneOf.0","typeLabel":"array"},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"},"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.properties.oneOf.1","typeLabel":"null"}],"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.properties","typeLabel":"array | null"},"items":{"oneOf":[{"description":"Configuration for the array item node.","uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.\\items.oneOf.0","typeLabel":"any"},{"type":"null","description":"Configuration for the array item node.","uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.\\items.oneOf.1","typeLabel":"null"}],"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.\\items","typeLabel":"any | null"}},"additionalProperties":false,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2","typeLabel":"object"},{"type":"object","description":"Configuration for the array item node of this array property.","required":["properties"],"properties":{"properties":{"oneOf":[{"type":"array","items":{"oneOf":[{}],"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.properties.oneOf.0.items.[INDEX]","typeLabel":"any"},"description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"isRequired":true,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.properties.oneOf.0","typeLabel":"any[]"},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"isRequired":true,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.properties.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.properties","typeLabel":"any[] | null"},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.enabled_stats","typeLabel":"null"},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.stat_options","typeLabel":"null"},"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.self.oneOf.0.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.self.oneOf.0.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.self.oneOf.0.enabled_stats.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.self.oneOf.0.enabled_stats","typeLabel":"enum\u003cstring>[] | null"},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.self.oneOf.0.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.self.oneOf.0.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.self.oneOf.0.stat_options.oneOf.0.histogram","typeLabel":"object"}},"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.self.oneOf.0.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.self.oneOf.0.stat_options.oneOf.1","typeLabel":"null"}],"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.self.oneOf.0.stat_options","typeLabel":"object | null"}},"additionalProperties":false,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.self.oneOf.0","typeLabel":"object"},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.self.oneOf.1.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.self.oneOf.1.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.self.oneOf.1.stat_options.oneOf.0.histogram","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.self.oneOf.1.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"isRequired":true,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.self.oneOf.1.stat_options.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.self.oneOf.1.stat_options","typeLabel":"object | null"},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.self.oneOf.1.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.self.oneOf.1.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.self.oneOf.1.enabled_stats.oneOf.1","typeLabel":"null"}],"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.self.oneOf.1.enabled_stats","typeLabel":"enum\u003cstring>[] | null"}},"additionalProperties":false,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.self.oneOf.1","typeLabel":"object"},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.self.oneOf.2","typeLabel":"null"}],"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.self","typeLabel":"object · object · null"},"items":{"oneOf":[{"description":"Configuration for the array item node.","uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.\\items.oneOf.0","typeLabel":"any"},{"type":"null","description":"Configuration for the array item node.","uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.\\items.oneOf.1","typeLabel":"null"}],"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.\\items","typeLabel":"any | null"}},"additionalProperties":false,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3","typeLabel":"object"},{"type":"object","description":"Configuration for the array item node of this array property.","required":["items"],"properties":{"items":{"oneOf":[{"description":"Configuration for the array item node.","isRequired":true,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.\\items.oneOf.0","typeLabel":"any"},{"type":"null","description":"Configuration for the array item node.","isRequired":true,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.\\items.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.\\items","typeLabel":"any | null"},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.enabled_stats","typeLabel":"null"},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.stat_options","typeLabel":"null"},"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.self.oneOf.0.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.self.oneOf.0.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.self.oneOf.0.enabled_stats.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.self.oneOf.0.enabled_stats","typeLabel":"enum\u003cstring>[] | null"},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.self.oneOf.0.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.self.oneOf.0.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.self.oneOf.0.stat_options.oneOf.0.histogram","typeLabel":"object"}},"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.self.oneOf.0.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.self.oneOf.0.stat_options.oneOf.1","typeLabel":"null"}],"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.self.oneOf.0.stat_options","typeLabel":"object | null"}},"additionalProperties":false,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.self.oneOf.0","typeLabel":"object"},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.self.oneOf.1.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.self.oneOf.1.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.self.oneOf.1.stat_options.oneOf.0.histogram","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.self.oneOf.1.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"isRequired":true,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.self.oneOf.1.stat_options.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.self.oneOf.1.stat_options","typeLabel":"object | null"},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.self.oneOf.1.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.self.oneOf.1.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.self.oneOf.1.enabled_stats.oneOf.1","typeLabel":"null"}],"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.self.oneOf.1.enabled_stats","typeLabel":"enum\u003cstring>[] | null"}},"additionalProperties":false,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.self.oneOf.1","typeLabel":"object"},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.self.oneOf.2","typeLabel":"null"}],"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.self","typeLabel":"object · object · null"},"properties":{"oneOf":[{"type":"array","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"},"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.properties.oneOf.0","typeLabel":"array"},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"},"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.properties.oneOf.1","typeLabel":"null"}],"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.properties","typeLabel":"array | null"}},"additionalProperties":false,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4","typeLabel":"object"},{"type":"null","description":"Configuration for the array item node of this array property.","uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.5","typeLabel":"null"}],"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items","typeLabel":"object · object · object · object · object · null"}},"additionalProperties":false,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2","typeLabel":"object"},{"type":"object","description":"Statistics configuration for a named property of an object node. The property may itself be primitive or non-primitive (recursive). A property must carry at least one configuration field — there is no no-op/inherited variant at the nested level. If a property is listed, it must specify what stats to compute. approx_count_distinct and count_distinct are mutually exclusive — the server rejects any request that includes both in the same enabled_stats array.","required":["path","properties"],"properties":{"properties":{"oneOf":[{"type":"array","items":{"oneOf":[{}],"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.properties.oneOf.0.items.[INDEX]","typeLabel":"any"},"description":"Explicit configurations for named child properties of this object property. Only listed children receive stats — unlisted ones are skipped entirely.","minItems":1,"isRequired":true,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.properties.oneOf.0","typeLabel":"any[]"},{"type":"null","description":"Explicit configurations for named child properties of this object property. Only listed children receive stats — unlisted ones are skipped entirely.","minItems":1,"isRequired":true,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.properties.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.properties","typeLabel":"any[] | null"},"path":{"type":"string","description":"Name of the child property relative to the parent object node. Must be a valid identifier (alphanumeric and underscores, max 256 chars).","maxLength":256,"pattern":"^[a-zA-Z0-9_]+$","isRequired":true,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.path","typeLabel":"string"},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.enabled_stats","typeLabel":"null"},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.stat_options","typeLabel":"null"},"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.self.oneOf.0.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.self.oneOf.0.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.self.oneOf.0.enabled_stats.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.self.oneOf.0.enabled_stats","typeLabel":"enum\u003cstring>[] | null"},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.self.oneOf.0.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.self.oneOf.0.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.self.oneOf.0.stat_options.oneOf.0.histogram","typeLabel":"object"}},"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.self.oneOf.0.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.self.oneOf.0.stat_options.oneOf.1","typeLabel":"null"}],"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.self.oneOf.0.stat_options","typeLabel":"object | null"}},"additionalProperties":false,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.self.oneOf.0","typeLabel":"object"},{"type":"object","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.self.oneOf.1.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.self.oneOf.1.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.self.oneOf.1.stat_options.oneOf.0.histogram","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.self.oneOf.1.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"isRequired":true,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.self.oneOf.1.stat_options.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.self.oneOf.1.stat_options","typeLabel":"object | null"},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.self.oneOf.1.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.self.oneOf.1.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.self.oneOf.1.enabled_stats.oneOf.1","typeLabel":"null"}],"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.self.oneOf.1.enabled_stats","typeLabel":"enum\u003cstring>[] | null"}},"additionalProperties":false,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.self.oneOf.1","typeLabel":"object"},{"type":"null","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.self.oneOf.2","typeLabel":"null"}],"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.self","typeLabel":"object · object · null"},"items":{"oneOf":[{"type":"object","description":"Configuration for the array item node of this array property.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.0.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.0.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.0.enabled_stats.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.0.enabled_stats","typeLabel":"enum\u003cstring>[] | null"},"self":{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.0.self","typeLabel":"null"},"properties":{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.0.properties","typeLabel":"null"},"items":{"oneOf":[{"type":"null","description":"Configuration for the array item node.","uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.0.\\items.oneOf.0","typeLabel":"null"},{"type":"null","description":"Configuration for the array item node.","uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.0.\\items.oneOf.1","typeLabel":"null"}],"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.0.\\items","typeLabel":"null"},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.0.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.0.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.0.stat_options.oneOf.0.histogram","typeLabel":"object"}},"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.0.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.0.stat_options.oneOf.1","typeLabel":"null"}],"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.0.stat_options","typeLabel":"object | null"}},"additionalProperties":false,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.0","typeLabel":"object"},{"type":"object","description":"Configuration for the array item node of this array property.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.1.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.1.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.1.stat_options.oneOf.0.histogram","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.1.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"isRequired":true,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.1.stat_options.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.1.stat_options","typeLabel":"object | null"},"self":{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.1.self","typeLabel":"null"},"properties":{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.1.properties","typeLabel":"null"},"items":{"oneOf":[{"type":"null","description":"Configuration for the array item node.","uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.1.\\items.oneOf.0","typeLabel":"null"},{"type":"null","description":"Configuration for the array item node.","uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.1.\\items.oneOf.1","typeLabel":"null"}],"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.1.\\items","typeLabel":"null"},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.1.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.1.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.1.enabled_stats.oneOf.1","typeLabel":"null"}],"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.1.enabled_stats","typeLabel":"enum\u003cstring>[] | null"}},"additionalProperties":false,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.1","typeLabel":"object"},{"type":"object","description":"Configuration for the array item node of this array property.","required":["self"],"properties":{"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.self.oneOf.0.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.self.oneOf.0.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.self.oneOf.0.enabled_stats.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.self.oneOf.0.enabled_stats","typeLabel":"enum\u003cstring>[] | null"},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.self.oneOf.0.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.self.oneOf.0.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.self.oneOf.0.stat_options.oneOf.0.histogram","typeLabel":"object"}},"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.self.oneOf.0.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.self.oneOf.0.stat_options.oneOf.1","typeLabel":"null"}],"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.self.oneOf.0.stat_options","typeLabel":"object | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.self.oneOf.0","typeLabel":"object"},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.self.oneOf.1.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.self.oneOf.1.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.self.oneOf.1.stat_options.oneOf.0.histogram","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.self.oneOf.1.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"isRequired":true,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.self.oneOf.1.stat_options.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.self.oneOf.1.stat_options","typeLabel":"object | null"},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.self.oneOf.1.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.self.oneOf.1.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.self.oneOf.1.enabled_stats.oneOf.1","typeLabel":"null"}],"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.self.oneOf.1.enabled_stats","typeLabel":"enum\u003cstring>[] | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.self.oneOf.1","typeLabel":"object"},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","isRequired":true,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.self.oneOf.2","typeLabel":"null"}],"isRequired":true,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.self","typeLabel":"object · object · null"},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.enabled_stats","typeLabel":"null"},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.stat_options","typeLabel":"null"},"properties":{"oneOf":[{"type":"array","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"},"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.properties.oneOf.0","typeLabel":"array"},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"},"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.properties.oneOf.1","typeLabel":"null"}],"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.properties","typeLabel":"array | null"},"items":{"oneOf":[{"description":"Configuration for the array item node.","uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.\\items.oneOf.0","typeLabel":"any"},{"type":"null","description":"Configuration for the array item node.","uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.\\items.oneOf.1","typeLabel":"null"}],"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.\\items","typeLabel":"any | null"}},"additionalProperties":false,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2","typeLabel":"object"},{"type":"object","description":"Configuration for the array item node of this array property.","required":["properties"],"properties":{"properties":{"oneOf":[{"type":"array","items":{"oneOf":[{}],"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.properties.oneOf.0.items.[INDEX]","typeLabel":"any"},"description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"isRequired":true,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.properties.oneOf.0","typeLabel":"any[]"},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"isRequired":true,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.properties.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.properties","typeLabel":"any[] | null"},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.enabled_stats","typeLabel":"null"},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.stat_options","typeLabel":"null"},"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.self.oneOf.0.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.self.oneOf.0.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.self.oneOf.0.enabled_stats.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.self.oneOf.0.enabled_stats","typeLabel":"enum\u003cstring>[] | null"},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.self.oneOf.0.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.self.oneOf.0.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.self.oneOf.0.stat_options.oneOf.0.histogram","typeLabel":"object"}},"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.self.oneOf.0.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.self.oneOf.0.stat_options.oneOf.1","typeLabel":"null"}],"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.self.oneOf.0.stat_options","typeLabel":"object | null"}},"additionalProperties":false,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.self.oneOf.0","typeLabel":"object"},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.self.oneOf.1.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.self.oneOf.1.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.self.oneOf.1.stat_options.oneOf.0.histogram","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.self.oneOf.1.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"isRequired":true,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.self.oneOf.1.stat_options.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.self.oneOf.1.stat_options","typeLabel":"object | null"},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.self.oneOf.1.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.self.oneOf.1.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.self.oneOf.1.enabled_stats.oneOf.1","typeLabel":"null"}],"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.self.oneOf.1.enabled_stats","typeLabel":"enum\u003cstring>[] | null"}},"additionalProperties":false,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.self.oneOf.1","typeLabel":"object"},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.self.oneOf.2","typeLabel":"null"}],"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.self","typeLabel":"object · object · null"},"items":{"oneOf":[{"description":"Configuration for the array item node.","uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.\\items.oneOf.0","typeLabel":"any"},{"type":"null","description":"Configuration for the array item node.","uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.\\items.oneOf.1","typeLabel":"null"}],"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.\\items","typeLabel":"any | null"}},"additionalProperties":false,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3","typeLabel":"object"},{"type":"object","description":"Configuration for the array item node of this array property.","required":["items"],"properties":{"items":{"oneOf":[{"description":"Configuration for the array item node.","isRequired":true,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.\\items.oneOf.0","typeLabel":"any"},{"type":"null","description":"Configuration for the array item node.","isRequired":true,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.\\items.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.\\items","typeLabel":"any | null"},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.enabled_stats","typeLabel":"null"},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.stat_options","typeLabel":"null"},"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.self.oneOf.0.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.self.oneOf.0.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.self.oneOf.0.enabled_stats.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.self.oneOf.0.enabled_stats","typeLabel":"enum\u003cstring>[] | null"},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.self.oneOf.0.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.self.oneOf.0.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.self.oneOf.0.stat_options.oneOf.0.histogram","typeLabel":"object"}},"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.self.oneOf.0.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.self.oneOf.0.stat_options.oneOf.1","typeLabel":"null"}],"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.self.oneOf.0.stat_options","typeLabel":"object | null"}},"additionalProperties":false,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.self.oneOf.0","typeLabel":"object"},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.self.oneOf.1.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.self.oneOf.1.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.self.oneOf.1.stat_options.oneOf.0.histogram","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.self.oneOf.1.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"isRequired":true,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.self.oneOf.1.stat_options.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.self.oneOf.1.stat_options","typeLabel":"object | null"},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.self.oneOf.1.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.self.oneOf.1.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.self.oneOf.1.enabled_stats.oneOf.1","typeLabel":"null"}],"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.self.oneOf.1.enabled_stats","typeLabel":"enum\u003cstring>[] | null"}},"additionalProperties":false,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.self.oneOf.1","typeLabel":"object"},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.self.oneOf.2","typeLabel":"null"}],"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.self","typeLabel":"object · object · null"},"properties":{"oneOf":[{"type":"array","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"},"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.properties.oneOf.0","typeLabel":"array"},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"},"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.properties.oneOf.1","typeLabel":"null"}],"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.properties","typeLabel":"array | null"}},"additionalProperties":false,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4","typeLabel":"object"},{"type":"null","description":"Configuration for the array item node of this array property.","uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.5","typeLabel":"null"}],"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items","typeLabel":"object · object · object · object · object · null"}},"additionalProperties":false,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3","typeLabel":"object"},{"type":"object","description":"Statistics configuration for a named property of an object node. The property may itself be primitive or non-primitive (recursive). A property must carry at least one configuration field — there is no no-op/inherited variant at the nested level. If a property is listed, it must specify what stats to compute. approx_count_distinct and count_distinct are mutually exclusive — the server rejects any request that includes both in the same enabled_stats array.","required":["path","items"],"properties":{"items":{"oneOf":[{"type":"object","description":"Configuration for the array item node of this array property.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.0.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.0.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.0.enabled_stats.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.0.enabled_stats","typeLabel":"enum\u003cstring>[] | null"},"self":{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.0.self","typeLabel":"null"},"properties":{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.0.properties","typeLabel":"null"},"items":{"oneOf":[{"type":"null","description":"Configuration for the array item node.","uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.0.\\items.oneOf.0","typeLabel":"null"},{"type":"null","description":"Configuration for the array item node.","uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.0.\\items.oneOf.1","typeLabel":"null"}],"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.0.\\items","typeLabel":"null"},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.0.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.0.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.0.stat_options.oneOf.0.histogram","typeLabel":"object"}},"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.0.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.0.stat_options.oneOf.1","typeLabel":"null"}],"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.0.stat_options","typeLabel":"object | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.0","typeLabel":"object"},{"type":"object","description":"Configuration for the array item node of this array property.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.1.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.1.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.1.stat_options.oneOf.0.histogram","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.1.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"isRequired":true,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.1.stat_options.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.1.stat_options","typeLabel":"object | null"},"self":{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.1.self","typeLabel":"null"},"properties":{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.1.properties","typeLabel":"null"},"items":{"oneOf":[{"type":"null","description":"Configuration for the array item node.","uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.1.\\items.oneOf.0","typeLabel":"null"},{"type":"null","description":"Configuration for the array item node.","uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.1.\\items.oneOf.1","typeLabel":"null"}],"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.1.\\items","typeLabel":"null"},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.1.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.1.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.1.enabled_stats.oneOf.1","typeLabel":"null"}],"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.1.enabled_stats","typeLabel":"enum\u003cstring>[] | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.1","typeLabel":"object"},{"type":"object","description":"Configuration for the array item node of this array property.","required":["self"],"properties":{"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.self.oneOf.0.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.self.oneOf.0.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.self.oneOf.0.enabled_stats.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.self.oneOf.0.enabled_stats","typeLabel":"enum\u003cstring>[] | null"},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.self.oneOf.0.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.self.oneOf.0.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.self.oneOf.0.stat_options.oneOf.0.histogram","typeLabel":"object"}},"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.self.oneOf.0.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.self.oneOf.0.stat_options.oneOf.1","typeLabel":"null"}],"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.self.oneOf.0.stat_options","typeLabel":"object | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.self.oneOf.0","typeLabel":"object"},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.self.oneOf.1.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.self.oneOf.1.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.self.oneOf.1.stat_options.oneOf.0.histogram","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.self.oneOf.1.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"isRequired":true,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.self.oneOf.1.stat_options.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.self.oneOf.1.stat_options","typeLabel":"object | null"},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.self.oneOf.1.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.self.oneOf.1.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.self.oneOf.1.enabled_stats.oneOf.1","typeLabel":"null"}],"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.self.oneOf.1.enabled_stats","typeLabel":"enum\u003cstring>[] | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.self.oneOf.1","typeLabel":"object"},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","isRequired":true,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.self.oneOf.2","typeLabel":"null"}],"isRequired":true,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.self","typeLabel":"object · object · null"},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.enabled_stats","typeLabel":"null"},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.stat_options","typeLabel":"null"},"properties":{"oneOf":[{"type":"array","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"},"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.properties.oneOf.0","typeLabel":"array"},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"},"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.properties.oneOf.1","typeLabel":"null"}],"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.properties","typeLabel":"array | null"},"items":{"oneOf":[{"description":"Configuration for the array item node.","uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.\\items.oneOf.0","typeLabel":"any"},{"type":"null","description":"Configuration for the array item node.","uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.\\items.oneOf.1","typeLabel":"null"}],"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.\\items","typeLabel":"any | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2","typeLabel":"object"},{"type":"object","description":"Configuration for the array item node of this array property.","required":["properties"],"properties":{"properties":{"oneOf":[{"type":"array","items":{"oneOf":[{}],"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.properties.oneOf.0.items.[INDEX]","typeLabel":"any"},"description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"isRequired":true,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.properties.oneOf.0","typeLabel":"any[]"},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"isRequired":true,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.properties.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.properties","typeLabel":"any[] | null"},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.enabled_stats","typeLabel":"null"},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.stat_options","typeLabel":"null"},"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.self.oneOf.0.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.self.oneOf.0.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.self.oneOf.0.enabled_stats.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.self.oneOf.0.enabled_stats","typeLabel":"enum\u003cstring>[] | null"},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.self.oneOf.0.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.self.oneOf.0.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.self.oneOf.0.stat_options.oneOf.0.histogram","typeLabel":"object"}},"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.self.oneOf.0.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.self.oneOf.0.stat_options.oneOf.1","typeLabel":"null"}],"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.self.oneOf.0.stat_options","typeLabel":"object | null"}},"additionalProperties":false,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.self.oneOf.0","typeLabel":"object"},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.self.oneOf.1.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.self.oneOf.1.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.self.oneOf.1.stat_options.oneOf.0.histogram","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.self.oneOf.1.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"isRequired":true,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.self.oneOf.1.stat_options.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.self.oneOf.1.stat_options","typeLabel":"object | null"},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.self.oneOf.1.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.self.oneOf.1.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.self.oneOf.1.enabled_stats.oneOf.1","typeLabel":"null"}],"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.self.oneOf.1.enabled_stats","typeLabel":"enum\u003cstring>[] | null"}},"additionalProperties":false,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.self.oneOf.1","typeLabel":"object"},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.self.oneOf.2","typeLabel":"null"}],"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.self","typeLabel":"object · object · null"},"items":{"oneOf":[{"description":"Configuration for the array item node.","uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.\\items.oneOf.0","typeLabel":"any"},{"type":"null","description":"Configuration for the array item node.","uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.\\items.oneOf.1","typeLabel":"null"}],"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.\\items","typeLabel":"any | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3","typeLabel":"object"},{"type":"object","description":"Configuration for the array item node of this array property.","required":["items"],"properties":{"items":{"oneOf":[{"description":"Configuration for the array item node.","isRequired":true,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.\\items.oneOf.0","typeLabel":"any"},{"type":"null","description":"Configuration for the array item node.","isRequired":true,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.\\items.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.\\items","typeLabel":"any | null"},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.enabled_stats","typeLabel":"null"},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.stat_options","typeLabel":"null"},"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.self.oneOf.0.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.self.oneOf.0.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.self.oneOf.0.enabled_stats.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.self.oneOf.0.enabled_stats","typeLabel":"enum\u003cstring>[] | null"},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.self.oneOf.0.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.self.oneOf.0.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.self.oneOf.0.stat_options.oneOf.0.histogram","typeLabel":"object"}},"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.self.oneOf.0.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.self.oneOf.0.stat_options.oneOf.1","typeLabel":"null"}],"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.self.oneOf.0.stat_options","typeLabel":"object | null"}},"additionalProperties":false,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.self.oneOf.0","typeLabel":"object"},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.self.oneOf.1.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.self.oneOf.1.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.self.oneOf.1.stat_options.oneOf.0.histogram","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.self.oneOf.1.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"isRequired":true,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.self.oneOf.1.stat_options.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.self.oneOf.1.stat_options","typeLabel":"object | null"},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.self.oneOf.1.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.self.oneOf.1.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.self.oneOf.1.enabled_stats.oneOf.1","typeLabel":"null"}],"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.self.oneOf.1.enabled_stats","typeLabel":"enum\u003cstring>[] | null"}},"additionalProperties":false,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.self.oneOf.1","typeLabel":"object"},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.self.oneOf.2","typeLabel":"null"}],"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.self","typeLabel":"object · object · null"},"properties":{"oneOf":[{"type":"array","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"},"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.properties.oneOf.0","typeLabel":"array"},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"},"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.properties.oneOf.1","typeLabel":"null"}],"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.properties","typeLabel":"array | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4","typeLabel":"object"},{"type":"null","description":"Configuration for the array item node of this array property.","isRequired":true,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.5","typeLabel":"null"}],"isRequired":true,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items","typeLabel":"object · object · object · object · object · null"},"path":{"type":"string","description":"Name of the child property relative to the parent object node. Must be a valid identifier (alphanumeric and underscores, max 256 chars).","maxLength":256,"pattern":"^[a-zA-Z0-9_]+$","isRequired":true,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.path","typeLabel":"string"},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.enabled_stats","typeLabel":"null"},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.stat_options","typeLabel":"null"},"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.self.oneOf.0.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.self.oneOf.0.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.self.oneOf.0.enabled_stats.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.self.oneOf.0.enabled_stats","typeLabel":"enum\u003cstring>[] | null"},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.self.oneOf.0.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.self.oneOf.0.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.self.oneOf.0.stat_options.oneOf.0.histogram","typeLabel":"object"}},"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.self.oneOf.0.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.self.oneOf.0.stat_options.oneOf.1","typeLabel":"null"}],"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.self.oneOf.0.stat_options","typeLabel":"object | null"}},"additionalProperties":false,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.self.oneOf.0","typeLabel":"object"},{"type":"object","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.self.oneOf.1.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.self.oneOf.1.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.self.oneOf.1.stat_options.oneOf.0.histogram","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.self.oneOf.1.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"isRequired":true,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.self.oneOf.1.stat_options.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.self.oneOf.1.stat_options","typeLabel":"object | null"},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.self.oneOf.1.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.self.oneOf.1.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.self.oneOf.1.enabled_stats.oneOf.1","typeLabel":"null"}],"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.self.oneOf.1.enabled_stats","typeLabel":"enum\u003cstring>[] | null"}},"additionalProperties":false,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.self.oneOf.1","typeLabel":"object"},{"type":"null","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.self.oneOf.2","typeLabel":"null"}],"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.self","typeLabel":"object · object · null"},"properties":{"oneOf":[{"type":"array","description":"Explicit configurations for named child properties of this object property. Only listed children receive stats — unlisted ones are skipped entirely.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"},"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.properties.oneOf.0","typeLabel":"array"},{"type":"null","description":"Explicit configurations for named child properties of this object property. Only listed children receive stats — unlisted ones are skipped entirely.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"},"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.properties.oneOf.1","typeLabel":"null"}],"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.properties","typeLabel":"array | null"}},"additionalProperties":false,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4","typeLabel":"object"}],"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX]","typeLabel":"object"},"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0","typeLabel":"object[]"},{"type":"null","description":"Explicit configurations for named child properties of an object field. Only listed children receive stats — unlisted ones are skipped entirely.","minItems":1,"items":{"oneOf":[{"type":"object","description":"Statistics configuration for a named property of an object node. The property may itself be primitive or non-primitive (recursive). A property must carry at least one configuration field — there is no no-op/inherited variant at the nested level. If a property is listed, it must specify what stats to compute. approx_count_distinct and count_distinct are mutually exclusive — the server rejects any request that includes both in the same enabled_stats array.","required":["path","enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"self":{"type":"null","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."},"properties":{"type":"null","description":"Explicit configurations for named child properties of this object property. Only listed children receive stats — unlisted ones are skipped entirely.","minItems":1},"items":{"type":"null","description":"Configuration for the array item node of this array property."},"path":{"type":"string","description":"Name of the child property relative to the parent object node. Must be a valid identifier (alphanumeric and underscores, max 256 chars).","maxLength":256,"pattern":"^[a-zA-Z0-9_]+$"},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Statistics configuration for a named property of an object node. The property may itself be primitive or non-primitive (recursive). A property must carry at least one configuration field — there is no no-op/inherited variant at the nested level. If a property is listed, it must specify what stats to compute. approx_count_distinct and count_distinct are mutually exclusive — the server rejects any request that includes both in the same enabled_stats array.","required":["path","stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"self":{"type":"null","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."},"properties":{"type":"null","description":"Explicit configurations for named child properties of this object property. Only listed children receive stats — unlisted ones are skipped entirely.","minItems":1},"items":{"type":"null","description":"Configuration for the array item node of this array property."},"path":{"type":"string","description":"Name of the child property relative to the parent object node. Must be a valid identifier (alphanumeric and underscores, max 256 chars).","maxLength":256,"pattern":"^[a-zA-Z0-9_]+$"},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"object","description":"Statistics configuration for a named property of an object node. The property may itself be primitive or non-primitive (recursive). A property must carry at least one configuration field — there is no no-op/inherited variant at the nested level. If a property is listed, it must specify what stats to compute. approx_count_distinct and count_distinct are mutually exclusive — the server rejects any request that includes both in the same enabled_stats array.","required":["path","self"],"properties":{"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"null","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."}]},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},"path":{"type":"string","description":"Name of the child property relative to the parent object node. Must be a valid identifier (alphanumeric and underscores, max 256 chars).","maxLength":256,"pattern":"^[a-zA-Z0-9_]+$"},"properties":{"oneOf":[{"type":"array","description":"Explicit configurations for named child properties of this object property. Only listed children receive stats — unlisted ones are skipped entirely.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}},{"type":"null","description":"Explicit configurations for named child properties of this object property. Only listed children receive stats — unlisted ones are skipped entirely.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}}]},"items":{"oneOf":[{"type":"object","description":"Configuration for the array item node of this array property.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"self":{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."},"properties":{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1},"items":{"oneOf":[{"type":"null","description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Configuration for the array item node of this array property.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"self":{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."},"properties":{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1},"items":{"oneOf":[{"type":"null","description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"object","description":"Configuration for the array item node of this array property.","required":["self"],"properties":{"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."}]},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},"properties":{"oneOf":[{"type":"array","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}}]},"items":{"oneOf":[{"description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]}},"additionalProperties":false},{"type":"object","description":"Configuration for the array item node of this array property.","required":["properties"],"properties":{"properties":{"oneOf":[{"type":"array","items":{"oneOf":[{}]},"description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1}]},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."}]},"items":{"oneOf":[{"description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]}},"additionalProperties":false},{"type":"object","description":"Configuration for the array item node of this array property.","required":["items"],"properties":{"items":{"oneOf":[{"description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."}]},"properties":{"oneOf":[{"type":"array","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}}]}},"additionalProperties":false},{"type":"null","description":"Configuration for the array item node of this array property."}]}},"additionalProperties":false},{"type":"object","description":"Statistics configuration for a named property of an object node. The property may itself be primitive or non-primitive (recursive). A property must carry at least one configuration field — there is no no-op/inherited variant at the nested level. If a property is listed, it must specify what stats to compute. approx_count_distinct and count_distinct are mutually exclusive — the server rejects any request that includes both in the same enabled_stats array.","required":["path","properties"],"properties":{"properties":{"oneOf":[{"type":"array","items":{"oneOf":[{}]},"description":"Explicit configurations for named child properties of this object property. Only listed children receive stats — unlisted ones are skipped entirely.","minItems":1},{"type":"null","description":"Explicit configurations for named child properties of this object property. Only listed children receive stats — unlisted ones are skipped entirely.","minItems":1}]},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},"path":{"type":"string","description":"Name of the child property relative to the parent object node. Must be a valid identifier (alphanumeric and underscores, max 256 chars).","maxLength":256,"pattern":"^[a-zA-Z0-9_]+$"},"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"null","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."}]},"items":{"oneOf":[{"type":"object","description":"Configuration for the array item node of this array property.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"self":{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."},"properties":{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1},"items":{"oneOf":[{"type":"null","description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Configuration for the array item node of this array property.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"self":{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."},"properties":{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1},"items":{"oneOf":[{"type":"null","description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"object","description":"Configuration for the array item node of this array property.","required":["self"],"properties":{"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."}]},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},"properties":{"oneOf":[{"type":"array","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}}]},"items":{"oneOf":[{"description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]}},"additionalProperties":false},{"type":"object","description":"Configuration for the array item node of this array property.","required":["properties"],"properties":{"properties":{"oneOf":[{"type":"array","items":{"oneOf":[{}]},"description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1}]},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."}]},"items":{"oneOf":[{"description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]}},"additionalProperties":false},{"type":"object","description":"Configuration for the array item node of this array property.","required":["items"],"properties":{"items":{"oneOf":[{"description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."}]},"properties":{"oneOf":[{"type":"array","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}}]}},"additionalProperties":false},{"type":"null","description":"Configuration for the array item node of this array property."}]}},"additionalProperties":false},{"type":"object","description":"Statistics configuration for a named property of an object node. The property may itself be primitive or non-primitive (recursive). A property must carry at least one configuration field — there is no no-op/inherited variant at the nested level. If a property is listed, it must specify what stats to compute. approx_count_distinct and count_distinct are mutually exclusive — the server rejects any request that includes both in the same enabled_stats array.","required":["path","items"],"properties":{"items":{"oneOf":[{"type":"object","description":"Configuration for the array item node of this array property.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"self":{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."},"properties":{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1},"items":{"oneOf":[{"type":"null","description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Configuration for the array item node of this array property.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"self":{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."},"properties":{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1},"items":{"oneOf":[{"type":"null","description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"object","description":"Configuration for the array item node of this array property.","required":["self"],"properties":{"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."}]},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},"properties":{"oneOf":[{"type":"array","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}}]},"items":{"oneOf":[{"description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]}},"additionalProperties":false},{"type":"object","description":"Configuration for the array item node of this array property.","required":["properties"],"properties":{"properties":{"oneOf":[{"type":"array","items":{"oneOf":[{}]},"description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1}]},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."}]},"items":{"oneOf":[{"description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]}},"additionalProperties":false},{"type":"object","description":"Configuration for the array item node of this array property.","required":["items"],"properties":{"items":{"oneOf":[{"description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."}]},"properties":{"oneOf":[{"type":"array","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}}]}},"additionalProperties":false},{"type":"null","description":"Configuration for the array item node of this array property."}]},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},"path":{"type":"string","description":"Name of the child property relative to the parent object node. Must be a valid identifier (alphanumeric and underscores, max 256 chars).","maxLength":256,"pattern":"^[a-zA-Z0-9_]+$"},"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"null","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."}]},"properties":{"oneOf":[{"type":"array","description":"Explicit configurations for named child properties of this object property. Only listed children receive stats — unlisted ones are skipped entirely.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}},{"type":"null","description":"Explicit configurations for named child properties of this object property. Only listed children receive stats — unlisted ones are skipped entirely.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}}]}},"additionalProperties":false}]},"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.1","typeLabel":"null"}],"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties","typeLabel":"object[] | null"},"items":{"oneOf":[{"type":"object","description":"Configuration for the array item node.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.0.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.0.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.0.enabled_stats.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.0.enabled_stats","typeLabel":"enum\u003cstring>[] | null"},"self":{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.0.self","typeLabel":"null"},"properties":{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.0.properties","typeLabel":"null"},"items":{"oneOf":[{"type":"null","description":"Configuration for the array item node.","uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.0.\\items.oneOf.0","typeLabel":"null"},{"type":"null","description":"Configuration for the array item node.","uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.0.\\items.oneOf.1","typeLabel":"null"}],"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.0.\\items","typeLabel":"null"},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.0.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.0.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.0.stat_options.oneOf.0.histogram","typeLabel":"object"}},"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.0.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.0.stat_options.oneOf.1","typeLabel":"null"}],"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.0.stat_options","typeLabel":"object | null"}},"additionalProperties":false,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.0","typeLabel":"object"},{"type":"object","description":"Configuration for the array item node.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.1.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.1.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.1.stat_options.oneOf.0.histogram","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.1.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"isRequired":true,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.1.stat_options.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.1.stat_options","typeLabel":"object | null"},"self":{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.1.self","typeLabel":"null"},"properties":{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.1.properties","typeLabel":"null"},"items":{"oneOf":[{"type":"null","description":"Configuration for the array item node.","uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.1.\\items.oneOf.0","typeLabel":"null"},{"type":"null","description":"Configuration for the array item node.","uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.1.\\items.oneOf.1","typeLabel":"null"}],"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.1.\\items","typeLabel":"null"},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.1.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.1.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.1.enabled_stats.oneOf.1","typeLabel":"null"}],"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.1.enabled_stats","typeLabel":"enum\u003cstring>[] | null"}},"additionalProperties":false,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.1","typeLabel":"object"},{"type":"object","description":"Configuration for the array item node.","required":["self"],"properties":{"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.self.oneOf.0.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.self.oneOf.0.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.self.oneOf.0.enabled_stats.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.self.oneOf.0.enabled_stats","typeLabel":"enum\u003cstring>[] | null"},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.self.oneOf.0.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.self.oneOf.0.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.self.oneOf.0.stat_options.oneOf.0.histogram","typeLabel":"object"}},"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.self.oneOf.0.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.self.oneOf.0.stat_options.oneOf.1","typeLabel":"null"}],"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.self.oneOf.0.stat_options","typeLabel":"object | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.self.oneOf.0","typeLabel":"object"},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.self.oneOf.1.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.self.oneOf.1.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.self.oneOf.1.stat_options.oneOf.0.histogram","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.self.oneOf.1.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"isRequired":true,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.self.oneOf.1.stat_options.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.self.oneOf.1.stat_options","typeLabel":"object | null"},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.self.oneOf.1.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.self.oneOf.1.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.self.oneOf.1.enabled_stats.oneOf.1","typeLabel":"null"}],"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.self.oneOf.1.enabled_stats","typeLabel":"enum\u003cstring>[] | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.self.oneOf.1","typeLabel":"object"},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","isRequired":true,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.self.oneOf.2","typeLabel":"null"}],"isRequired":true,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.self","typeLabel":"object · object · null"},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.enabled_stats","typeLabel":"null"},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.stat_options","typeLabel":"null"},"properties":{"oneOf":[{"type":"array","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"},"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.properties.oneOf.0","typeLabel":"array"},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"},"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.properties.oneOf.1","typeLabel":"null"}],"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.properties","typeLabel":"array | null"},"items":{"oneOf":[{"description":"Configuration for the array item node.","uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.\\items.oneOf.0","typeLabel":"any"},{"type":"null","description":"Configuration for the array item node.","uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.\\items.oneOf.1","typeLabel":"null"}],"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.\\items","typeLabel":"any | null"}},"additionalProperties":false,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.2","typeLabel":"object"},{"type":"object","description":"Configuration for the array item node.","required":["properties"],"properties":{"properties":{"oneOf":[{"type":"array","items":{"oneOf":[{}],"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.properties.oneOf.0.items.[INDEX]","typeLabel":"any"},"description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"isRequired":true,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.properties.oneOf.0","typeLabel":"any[]"},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"isRequired":true,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.properties.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.properties","typeLabel":"any[] | null"},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.enabled_stats","typeLabel":"null"},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.stat_options","typeLabel":"null"},"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.self.oneOf.0.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.self.oneOf.0.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.self.oneOf.0.enabled_stats.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.self.oneOf.0.enabled_stats","typeLabel":"enum\u003cstring>[] | null"},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.self.oneOf.0.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.self.oneOf.0.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.self.oneOf.0.stat_options.oneOf.0.histogram","typeLabel":"object"}},"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.self.oneOf.0.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.self.oneOf.0.stat_options.oneOf.1","typeLabel":"null"}],"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.self.oneOf.0.stat_options","typeLabel":"object | null"}},"additionalProperties":false,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.self.oneOf.0","typeLabel":"object"},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.self.oneOf.1.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.self.oneOf.1.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.self.oneOf.1.stat_options.oneOf.0.histogram","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.self.oneOf.1.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"isRequired":true,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.self.oneOf.1.stat_options.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.self.oneOf.1.stat_options","typeLabel":"object | null"},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.self.oneOf.1.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.self.oneOf.1.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.self.oneOf.1.enabled_stats.oneOf.1","typeLabel":"null"}],"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.self.oneOf.1.enabled_stats","typeLabel":"enum\u003cstring>[] | null"}},"additionalProperties":false,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.self.oneOf.1","typeLabel":"object"},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.self.oneOf.2","typeLabel":"null"}],"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.self","typeLabel":"object · object · null"},"items":{"oneOf":[{"description":"Configuration for the array item node.","uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.\\items.oneOf.0","typeLabel":"any"},{"type":"null","description":"Configuration for the array item node.","uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.\\items.oneOf.1","typeLabel":"null"}],"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.\\items","typeLabel":"any | null"}},"additionalProperties":false,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.3","typeLabel":"object"},{"type":"object","description":"Configuration for the array item node.","required":["items"],"properties":{"items":{"oneOf":[{"description":"Configuration for the array item node.","isRequired":true,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.\\items.oneOf.0","typeLabel":"any"},{"type":"null","description":"Configuration for the array item node.","isRequired":true,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.\\items.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.\\items","typeLabel":"any | null"},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.enabled_stats","typeLabel":"null"},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.stat_options","typeLabel":"null"},"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.self.oneOf.0.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.self.oneOf.0.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.self.oneOf.0.enabled_stats.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.self.oneOf.0.enabled_stats","typeLabel":"enum\u003cstring>[] | null"},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.self.oneOf.0.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.self.oneOf.0.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.self.oneOf.0.stat_options.oneOf.0.histogram","typeLabel":"object"}},"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.self.oneOf.0.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.self.oneOf.0.stat_options.oneOf.1","typeLabel":"null"}],"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.self.oneOf.0.stat_options","typeLabel":"object | null"}},"additionalProperties":false,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.self.oneOf.0","typeLabel":"object"},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.self.oneOf.1.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.self.oneOf.1.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.self.oneOf.1.stat_options.oneOf.0.histogram","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.self.oneOf.1.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"isRequired":true,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.self.oneOf.1.stat_options.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.self.oneOf.1.stat_options","typeLabel":"object | null"},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.self.oneOf.1.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.self.oneOf.1.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.self.oneOf.1.enabled_stats.oneOf.1","typeLabel":"null"}],"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.self.oneOf.1.enabled_stats","typeLabel":"enum\u003cstring>[] | null"}},"additionalProperties":false,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.self.oneOf.1","typeLabel":"object"},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.self.oneOf.2","typeLabel":"null"}],"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.self","typeLabel":"object · object · null"},"properties":{"oneOf":[{"type":"array","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"},"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.properties.oneOf.0","typeLabel":"array"},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"},"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.properties.oneOf.1","typeLabel":"null"}],"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.properties","typeLabel":"array | null"}},"additionalProperties":false,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.4","typeLabel":"object"},{"type":"null","description":"Configuration for the array item node.","uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.5","typeLabel":"null"}],"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items","typeLabel":"object · object · object · object · object · null"}},"uniqueKey":"dataset.oneOf.1.fields.oneOf.0.items.[INDEX]","typeLabel":"object"},"description":"Per-field overrides for individual dataset columns.","isRequired":true,"uniqueKey":"dataset.oneOf.1.fields.oneOf.0","typeLabel":"object[]"},{"type":"null","description":"Per-field overrides for individual dataset columns.","isRequired":true,"uniqueKey":"dataset.oneOf.1.fields.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"dataset.oneOf.1.fields","typeLabel":"object[] | null"},"scope":{"oneOf":[{"type":"object","description":"A stat selection with optional per-stat configuration. At least one of enabled_stats or stat_options must be provided. An empty enabled_stats array explicitly disables all stats for this scope. approx_count_distinct and count_distinct are mutually exclusive — the server rejects any request that includes both in the same enabled_stats array.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"dataset.oneOf.1.scope.oneOf.0.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"dataset.oneOf.1.scope.oneOf.0.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"dataset.oneOf.1.scope.oneOf.0.enabled_stats.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"dataset.oneOf.1.scope.oneOf.0.enabled_stats","typeLabel":"enum\u003cstring>[] | null"},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"dataset.oneOf.1.scope.oneOf.0.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"dataset.oneOf.1.scope.oneOf.0.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"dataset.oneOf.1.scope.oneOf.0.stat_options.oneOf.0.histogram","typeLabel":"object"}},"uniqueKey":"dataset.oneOf.1.scope.oneOf.0.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"uniqueKey":"dataset.oneOf.1.scope.oneOf.0.stat_options.oneOf.1","typeLabel":"null"}],"uniqueKey":"dataset.oneOf.1.scope.oneOf.0.stat_options","typeLabel":"object | null"}},"additionalProperties":false,"uniqueKey":"dataset.oneOf.1.scope.oneOf.0","typeLabel":"object"},{"type":"object","description":"A stat selection with optional per-stat configuration. At least one of enabled_stats or stat_options must be provided. An empty enabled_stats array explicitly disables all stats for this scope. approx_count_distinct and count_distinct are mutually exclusive — the server rejects any request that includes both in the same enabled_stats array.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"dataset.oneOf.1.scope.oneOf.1.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"dataset.oneOf.1.scope.oneOf.1.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"dataset.oneOf.1.scope.oneOf.1.stat_options.oneOf.0.histogram","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"dataset.oneOf.1.scope.oneOf.1.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"isRequired":true,"uniqueKey":"dataset.oneOf.1.scope.oneOf.1.stat_options.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"dataset.oneOf.1.scope.oneOf.1.stat_options","typeLabel":"object | null"},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"dataset.oneOf.1.scope.oneOf.1.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"dataset.oneOf.1.scope.oneOf.1.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"dataset.oneOf.1.scope.oneOf.1.enabled_stats.oneOf.1","typeLabel":"null"}],"uniqueKey":"dataset.oneOf.1.scope.oneOf.1.enabled_stats","typeLabel":"enum\u003cstring>[] | null"}},"additionalProperties":false,"uniqueKey":"dataset.oneOf.1.scope.oneOf.1","typeLabel":"object"},{"type":"null","uniqueKey":"dataset.oneOf.1.scope.oneOf.2","typeLabel":"null"}],"uniqueKey":"dataset.oneOf.1.scope","typeLabel":"object · object · null"}},"additionalProperties":false,"uniqueKey":"dataset.oneOf.1","typeLabel":"object"},{"type":"null","description":"Configuration for dataset schema columns. Use 'scope' to override defaults for all dataset fields, or to disable the namespace entirely via enabled_stats: []. Use 'fields' for per-field overrides. Null when the config does not touch this namespace.","uniqueKey":"dataset.oneOf.2","typeLabel":"null"}],"uniqueKey":"dataset","typeLabel":"object · object · null"},"rosetta_stone":{"oneOf":[{"type":"object","description":"Configuration for Rosetta Stone attributes. Use 'scope' to override defaults for all Rosetta Stone fields, or to disable the namespace entirely via enabled_stats: []. Use 'fields' for per-field overrides. Null when the config does not touch this namespace.","required":["scope"],"properties":{"scope":{"oneOf":[{"type":"object","description":"A stat selection with optional per-stat configuration. At least one of enabled_stats or stat_options must be provided. An empty enabled_stats array explicitly disables all stats for this scope. approx_count_distinct and count_distinct are mutually exclusive — the server rejects any request that includes both in the same enabled_stats array.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"rosetta_stone.oneOf.0.scope.oneOf.0.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.0.scope.oneOf.0.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.0.scope.oneOf.0.enabled_stats.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.0.scope.oneOf.0.enabled_stats","typeLabel":"enum\u003cstring>[] | null"},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"rosetta_stone.oneOf.0.scope.oneOf.0.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"rosetta_stone.oneOf.0.scope.oneOf.0.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"rosetta_stone.oneOf.0.scope.oneOf.0.stat_options.oneOf.0.histogram","typeLabel":"object"}},"uniqueKey":"rosetta_stone.oneOf.0.scope.oneOf.0.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"uniqueKey":"rosetta_stone.oneOf.0.scope.oneOf.0.stat_options.oneOf.1","typeLabel":"null"}],"uniqueKey":"rosetta_stone.oneOf.0.scope.oneOf.0.stat_options","typeLabel":"object | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.0.scope.oneOf.0","typeLabel":"object"},{"type":"object","description":"A stat selection with optional per-stat configuration. At least one of enabled_stats or stat_options must be provided. An empty enabled_stats array explicitly disables all stats for this scope. approx_count_distinct and count_distinct are mutually exclusive — the server rejects any request that includes both in the same enabled_stats array.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"rosetta_stone.oneOf.0.scope.oneOf.1.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"rosetta_stone.oneOf.0.scope.oneOf.1.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"rosetta_stone.oneOf.0.scope.oneOf.1.stat_options.oneOf.0.histogram","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.0.scope.oneOf.1.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.0.scope.oneOf.1.stat_options.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.0.scope.oneOf.1.stat_options","typeLabel":"object | null"},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"rosetta_stone.oneOf.0.scope.oneOf.1.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"rosetta_stone.oneOf.0.scope.oneOf.1.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"rosetta_stone.oneOf.0.scope.oneOf.1.enabled_stats.oneOf.1","typeLabel":"null"}],"uniqueKey":"rosetta_stone.oneOf.0.scope.oneOf.1.enabled_stats","typeLabel":"enum\u003cstring>[] | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.0.scope.oneOf.1","typeLabel":"object"},{"type":"null","isRequired":true,"uniqueKey":"rosetta_stone.oneOf.0.scope.oneOf.2","typeLabel":"null"}],"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.0.scope","typeLabel":"object · object · null"},"fields":{"oneOf":[{"type":"array","description":"Per-field overrides for individual Rosetta Stone attributes.","items":{"type":"object","description":"Common stat configuration shared by dataset and Rosetta Stone field configs. Exactly one of three modes must be used (the server rejects invalid combinations):\n\n1. **Primitive field** — provide enabled_stats and/or stat_options at the top level.\n Must not include self, properties, or items.\n\n2. **Non-primitive field** — provide self, properties, and/or items for nested structure.\n Must not include enabled_stats or stat_options at this level;\n use self for node-level stat configuration instead.\n\n3. **No-op / inherit** — leave all stat fields null or absent. The field inherits its\n configuration from the namespace scope or global defaults.\n\n\nThis schema deliberately has no `oneOf` over the three modes. Mode 3 is all five slots null, which matches neither of the other two, so a closed union here would reject it.\nClosing this schema is left to the two that compose it. `additionalProperties: false` here would only see the properties below, so it would reject the `field_name` and `attribute_name` its siblings contribute; `DatasetFieldConfig` and `RosettaStoneFieldConfig` use `unevaluatedProperties: false`, which sees the whole composition.","required":["attribute_name"],"properties":{"attribute_name":{"type":"string","description":"The Rosetta Stone attribute name (e.g. 'hl7_gender', 'unique_identifier'). Must be a valid identifier (alphanumeric and underscores, max 256 chars).","maxLength":256,"pattern":"^[a-zA-Z0-9_]+$","isRequired":true,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].attribute_name","typeLabel":"string"},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].enabled_stats.oneOf.1","typeLabel":"null"}],"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].enabled_stats","typeLabel":"enum\u003cstring>[] | null"},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].stat_options.oneOf.0.histogram","typeLabel":"object"}},"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].stat_options.oneOf.1","typeLabel":"null"}],"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].stat_options","typeLabel":"object | null"},"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive field node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].self.oneOf.0.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].self.oneOf.0.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].self.oneOf.0.enabled_stats.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].self.oneOf.0.enabled_stats","typeLabel":"enum\u003cstring>[] | null"},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].self.oneOf.0.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].self.oneOf.0.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].self.oneOf.0.stat_options.oneOf.0.histogram","typeLabel":"object"}},"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].self.oneOf.0.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].self.oneOf.0.stat_options.oneOf.1","typeLabel":"null"}],"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].self.oneOf.0.stat_options","typeLabel":"object | null"}},"additionalProperties":false,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].self.oneOf.0","typeLabel":"object"},{"type":"object","description":"Statistics for the non-primitive field node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].self.oneOf.1.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].self.oneOf.1.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].self.oneOf.1.stat_options.oneOf.0.histogram","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].self.oneOf.1.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].self.oneOf.1.stat_options.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].self.oneOf.1.stat_options","typeLabel":"object | null"},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].self.oneOf.1.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].self.oneOf.1.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].self.oneOf.1.enabled_stats.oneOf.1","typeLabel":"null"}],"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].self.oneOf.1.enabled_stats","typeLabel":"enum\u003cstring>[] | null"}},"additionalProperties":false,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].self.oneOf.1","typeLabel":"object"},{"type":"null","description":"Statistics for the non-primitive field node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].self.oneOf.2","typeLabel":"null"}],"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].self","typeLabel":"object · object · null"},"properties":{"oneOf":[{"type":"array","description":"Explicit configurations for named child properties of an object field. Only listed children receive stats — unlisted ones are skipped entirely.","minItems":1,"items":{"oneOf":[{"type":"object","description":"Statistics configuration for a named property of an object node. The property may itself be primitive or non-primitive (recursive). A property must carry at least one configuration field — there is no no-op/inherited variant at the nested level. If a property is listed, it must specify what stats to compute. approx_count_distinct and count_distinct are mutually exclusive — the server rejects any request that includes both in the same enabled_stats array.","required":["path","enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.0.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.0.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.0.enabled_stats.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.0.enabled_stats","typeLabel":"enum\u003cstring>[] | null"},"path":{"type":"string","description":"Name of the child property relative to the parent object node. Must be a valid identifier (alphanumeric and underscores, max 256 chars).","maxLength":256,"pattern":"^[a-zA-Z0-9_]+$","isRequired":true,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.0.path","typeLabel":"string"},"self":{"type":"null","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.0.self","typeLabel":"null"},"properties":{"type":"null","description":"Explicit configurations for named child properties of this object property. Only listed children receive stats — unlisted ones are skipped entirely.","minItems":1,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.0.properties","typeLabel":"null"},"items":{"type":"null","description":"Configuration for the array item node of this array property.","uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.0.\\items","typeLabel":"null"},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.0.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.0.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.0.stat_options.oneOf.0.histogram","typeLabel":"object"}},"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.0.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.0.stat_options.oneOf.1","typeLabel":"null"}],"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.0.stat_options","typeLabel":"object | null"}},"additionalProperties":false,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.0","typeLabel":"object"},{"type":"object","description":"Statistics configuration for a named property of an object node. The property may itself be primitive or non-primitive (recursive). A property must carry at least one configuration field — there is no no-op/inherited variant at the nested level. If a property is listed, it must specify what stats to compute. approx_count_distinct and count_distinct are mutually exclusive — the server rejects any request that includes both in the same enabled_stats array.","required":["path","stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.1.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.1.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.1.stat_options.oneOf.0.histogram","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.1.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.1.stat_options.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.1.stat_options","typeLabel":"object | null"},"path":{"type":"string","description":"Name of the child property relative to the parent object node. Must be a valid identifier (alphanumeric and underscores, max 256 chars).","maxLength":256,"pattern":"^[a-zA-Z0-9_]+$","isRequired":true,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.1.path","typeLabel":"string"},"self":{"type":"null","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.1.self","typeLabel":"null"},"properties":{"type":"null","description":"Explicit configurations for named child properties of this object property. Only listed children receive stats — unlisted ones are skipped entirely.","minItems":1,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.1.properties","typeLabel":"null"},"items":{"type":"null","description":"Configuration for the array item node of this array property.","uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.1.\\items","typeLabel":"null"},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.1.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.1.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.1.enabled_stats.oneOf.1","typeLabel":"null"}],"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.1.enabled_stats","typeLabel":"enum\u003cstring>[] | null"}},"additionalProperties":false,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.1","typeLabel":"object"},{"type":"object","description":"Statistics configuration for a named property of an object node. The property may itself be primitive or non-primitive (recursive). A property must carry at least one configuration field — there is no no-op/inherited variant at the nested level. If a property is listed, it must specify what stats to compute. approx_count_distinct and count_distinct are mutually exclusive — the server rejects any request that includes both in the same enabled_stats array.","required":["path","self"],"properties":{"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.self.oneOf.0.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.self.oneOf.0.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.self.oneOf.0.enabled_stats.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.self.oneOf.0.enabled_stats","typeLabel":"enum\u003cstring>[] | null"},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.self.oneOf.0.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.self.oneOf.0.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.self.oneOf.0.stat_options.oneOf.0.histogram","typeLabel":"object"}},"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.self.oneOf.0.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.self.oneOf.0.stat_options.oneOf.1","typeLabel":"null"}],"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.self.oneOf.0.stat_options","typeLabel":"object | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.self.oneOf.0","typeLabel":"object"},{"type":"object","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.self.oneOf.1.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.self.oneOf.1.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.self.oneOf.1.stat_options.oneOf.0.histogram","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.self.oneOf.1.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.self.oneOf.1.stat_options.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.self.oneOf.1.stat_options","typeLabel":"object | null"},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.self.oneOf.1.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.self.oneOf.1.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.self.oneOf.1.enabled_stats.oneOf.1","typeLabel":"null"}],"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.self.oneOf.1.enabled_stats","typeLabel":"enum\u003cstring>[] | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.self.oneOf.1","typeLabel":"object"},{"type":"null","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","isRequired":true,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.self.oneOf.2","typeLabel":"null"}],"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.self","typeLabel":"object · object · null"},"path":{"type":"string","description":"Name of the child property relative to the parent object node. Must be a valid identifier (alphanumeric and underscores, max 256 chars).","maxLength":256,"pattern":"^[a-zA-Z0-9_]+$","isRequired":true,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.path","typeLabel":"string"},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.enabled_stats","typeLabel":"null"},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.stat_options","typeLabel":"null"},"properties":{"oneOf":[{"type":"array","description":"Explicit configurations for named child properties of this object property. Only listed children receive stats — unlisted ones are skipped entirely.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"},"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.properties.oneOf.0","typeLabel":"array"},{"type":"null","description":"Explicit configurations for named child properties of this object property. Only listed children receive stats — unlisted ones are skipped entirely.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"},"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.properties.oneOf.1","typeLabel":"null"}],"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.properties","typeLabel":"array | null"},"items":{"oneOf":[{"type":"object","description":"Configuration for the array item node of this array property.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.0.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.0.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.0.enabled_stats.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.0.enabled_stats","typeLabel":"enum\u003cstring>[] | null"},"self":{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.0.self","typeLabel":"null"},"properties":{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.0.properties","typeLabel":"null"},"items":{"oneOf":[{"type":"null","description":"Configuration for the array item node.","uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.0.\\items.oneOf.0","typeLabel":"null"},{"type":"null","description":"Configuration for the array item node.","uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.0.\\items.oneOf.1","typeLabel":"null"}],"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.0.\\items","typeLabel":"null"},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.0.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.0.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.0.stat_options.oneOf.0.histogram","typeLabel":"object"}},"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.0.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.0.stat_options.oneOf.1","typeLabel":"null"}],"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.0.stat_options","typeLabel":"object | null"}},"additionalProperties":false,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.0","typeLabel":"object"},{"type":"object","description":"Configuration for the array item node of this array property.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.1.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.1.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.1.stat_options.oneOf.0.histogram","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.1.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.1.stat_options.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.1.stat_options","typeLabel":"object | null"},"self":{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.1.self","typeLabel":"null"},"properties":{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.1.properties","typeLabel":"null"},"items":{"oneOf":[{"type":"null","description":"Configuration for the array item node.","uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.1.\\items.oneOf.0","typeLabel":"null"},{"type":"null","description":"Configuration for the array item node.","uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.1.\\items.oneOf.1","typeLabel":"null"}],"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.1.\\items","typeLabel":"null"},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.1.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.1.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.1.enabled_stats.oneOf.1","typeLabel":"null"}],"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.1.enabled_stats","typeLabel":"enum\u003cstring>[] | null"}},"additionalProperties":false,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.1","typeLabel":"object"},{"type":"object","description":"Configuration for the array item node of this array property.","required":["self"],"properties":{"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.self.oneOf.0.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.self.oneOf.0.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.self.oneOf.0.enabled_stats.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.self.oneOf.0.enabled_stats","typeLabel":"enum\u003cstring>[] | null"},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.self.oneOf.0.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.self.oneOf.0.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.self.oneOf.0.stat_options.oneOf.0.histogram","typeLabel":"object"}},"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.self.oneOf.0.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.self.oneOf.0.stat_options.oneOf.1","typeLabel":"null"}],"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.self.oneOf.0.stat_options","typeLabel":"object | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.self.oneOf.0","typeLabel":"object"},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.self.oneOf.1.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.self.oneOf.1.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.self.oneOf.1.stat_options.oneOf.0.histogram","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.self.oneOf.1.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.self.oneOf.1.stat_options.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.self.oneOf.1.stat_options","typeLabel":"object | null"},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.self.oneOf.1.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.self.oneOf.1.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.self.oneOf.1.enabled_stats.oneOf.1","typeLabel":"null"}],"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.self.oneOf.1.enabled_stats","typeLabel":"enum\u003cstring>[] | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.self.oneOf.1","typeLabel":"object"},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","isRequired":true,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.self.oneOf.2","typeLabel":"null"}],"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.self","typeLabel":"object · object · null"},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.enabled_stats","typeLabel":"null"},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.stat_options","typeLabel":"null"},"properties":{"oneOf":[{"type":"array","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"},"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.properties.oneOf.0","typeLabel":"array"},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"},"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.properties.oneOf.1","typeLabel":"null"}],"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.properties","typeLabel":"array | null"},"items":{"oneOf":[{"description":"Configuration for the array item node.","uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.\\items.oneOf.0","typeLabel":"any"},{"type":"null","description":"Configuration for the array item node.","uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.\\items.oneOf.1","typeLabel":"null"}],"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.\\items","typeLabel":"any | null"}},"additionalProperties":false,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2","typeLabel":"object"},{"type":"object","description":"Configuration for the array item node of this array property.","required":["properties"],"properties":{"properties":{"oneOf":[{"type":"array","items":{"oneOf":[{}],"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.properties.oneOf.0.items.[INDEX]","typeLabel":"any"},"description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.properties.oneOf.0","typeLabel":"any[]"},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.properties.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.properties","typeLabel":"any[] | null"},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.enabled_stats","typeLabel":"null"},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.stat_options","typeLabel":"null"},"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.self.oneOf.0.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.self.oneOf.0.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.self.oneOf.0.enabled_stats.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.self.oneOf.0.enabled_stats","typeLabel":"enum\u003cstring>[] | null"},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.self.oneOf.0.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.self.oneOf.0.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.self.oneOf.0.stat_options.oneOf.0.histogram","typeLabel":"object"}},"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.self.oneOf.0.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.self.oneOf.0.stat_options.oneOf.1","typeLabel":"null"}],"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.self.oneOf.0.stat_options","typeLabel":"object | null"}},"additionalProperties":false,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.self.oneOf.0","typeLabel":"object"},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.self.oneOf.1.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.self.oneOf.1.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.self.oneOf.1.stat_options.oneOf.0.histogram","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.self.oneOf.1.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.self.oneOf.1.stat_options.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.self.oneOf.1.stat_options","typeLabel":"object | null"},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.self.oneOf.1.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.self.oneOf.1.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.self.oneOf.1.enabled_stats.oneOf.1","typeLabel":"null"}],"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.self.oneOf.1.enabled_stats","typeLabel":"enum\u003cstring>[] | null"}},"additionalProperties":false,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.self.oneOf.1","typeLabel":"object"},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.self.oneOf.2","typeLabel":"null"}],"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.self","typeLabel":"object · object · null"},"items":{"oneOf":[{"description":"Configuration for the array item node.","uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.\\items.oneOf.0","typeLabel":"any"},{"type":"null","description":"Configuration for the array item node.","uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.\\items.oneOf.1","typeLabel":"null"}],"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.\\items","typeLabel":"any | null"}},"additionalProperties":false,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3","typeLabel":"object"},{"type":"object","description":"Configuration for the array item node of this array property.","required":["items"],"properties":{"items":{"oneOf":[{"description":"Configuration for the array item node.","isRequired":true,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.\\items.oneOf.0","typeLabel":"any"},{"type":"null","description":"Configuration for the array item node.","isRequired":true,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.\\items.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.\\items","typeLabel":"any | null"},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.enabled_stats","typeLabel":"null"},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.stat_options","typeLabel":"null"},"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.self.oneOf.0.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.self.oneOf.0.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.self.oneOf.0.enabled_stats.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.self.oneOf.0.enabled_stats","typeLabel":"enum\u003cstring>[] | null"},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.self.oneOf.0.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.self.oneOf.0.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.self.oneOf.0.stat_options.oneOf.0.histogram","typeLabel":"object"}},"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.self.oneOf.0.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.self.oneOf.0.stat_options.oneOf.1","typeLabel":"null"}],"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.self.oneOf.0.stat_options","typeLabel":"object | null"}},"additionalProperties":false,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.self.oneOf.0","typeLabel":"object"},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.self.oneOf.1.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.self.oneOf.1.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.self.oneOf.1.stat_options.oneOf.0.histogram","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.self.oneOf.1.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.self.oneOf.1.stat_options.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.self.oneOf.1.stat_options","typeLabel":"object | null"},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.self.oneOf.1.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.self.oneOf.1.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.self.oneOf.1.enabled_stats.oneOf.1","typeLabel":"null"}],"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.self.oneOf.1.enabled_stats","typeLabel":"enum\u003cstring>[] | null"}},"additionalProperties":false,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.self.oneOf.1","typeLabel":"object"},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.self.oneOf.2","typeLabel":"null"}],"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.self","typeLabel":"object · object · null"},"properties":{"oneOf":[{"type":"array","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"},"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.properties.oneOf.0","typeLabel":"array"},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"},"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.properties.oneOf.1","typeLabel":"null"}],"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.properties","typeLabel":"array | null"}},"additionalProperties":false,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4","typeLabel":"object"},{"type":"null","description":"Configuration for the array item node of this array property.","uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.5","typeLabel":"null"}],"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items","typeLabel":"object · object · object · object · object · null"}},"additionalProperties":false,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2","typeLabel":"object"},{"type":"object","description":"Statistics configuration for a named property of an object node. The property may itself be primitive or non-primitive (recursive). A property must carry at least one configuration field — there is no no-op/inherited variant at the nested level. If a property is listed, it must specify what stats to compute. approx_count_distinct and count_distinct are mutually exclusive — the server rejects any request that includes both in the same enabled_stats array.","required":["path","properties"],"properties":{"properties":{"oneOf":[{"type":"array","items":{"oneOf":[{}],"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.properties.oneOf.0.items.[INDEX]","typeLabel":"any"},"description":"Explicit configurations for named child properties of this object property. Only listed children receive stats — unlisted ones are skipped entirely.","minItems":1,"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.properties.oneOf.0","typeLabel":"any[]"},{"type":"null","description":"Explicit configurations for named child properties of this object property. Only listed children receive stats — unlisted ones are skipped entirely.","minItems":1,"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.properties.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.properties","typeLabel":"any[] | null"},"path":{"type":"string","description":"Name of the child property relative to the parent object node. Must be a valid identifier (alphanumeric and underscores, max 256 chars).","maxLength":256,"pattern":"^[a-zA-Z0-9_]+$","isRequired":true,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.path","typeLabel":"string"},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.enabled_stats","typeLabel":"null"},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.stat_options","typeLabel":"null"},"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.self.oneOf.0.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.self.oneOf.0.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.self.oneOf.0.enabled_stats.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.self.oneOf.0.enabled_stats","typeLabel":"enum\u003cstring>[] | null"},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.self.oneOf.0.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.self.oneOf.0.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.self.oneOf.0.stat_options.oneOf.0.histogram","typeLabel":"object"}},"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.self.oneOf.0.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.self.oneOf.0.stat_options.oneOf.1","typeLabel":"null"}],"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.self.oneOf.0.stat_options","typeLabel":"object | null"}},"additionalProperties":false,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.self.oneOf.0","typeLabel":"object"},{"type":"object","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.self.oneOf.1.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.self.oneOf.1.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.self.oneOf.1.stat_options.oneOf.0.histogram","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.self.oneOf.1.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.self.oneOf.1.stat_options.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.self.oneOf.1.stat_options","typeLabel":"object | null"},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.self.oneOf.1.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.self.oneOf.1.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.self.oneOf.1.enabled_stats.oneOf.1","typeLabel":"null"}],"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.self.oneOf.1.enabled_stats","typeLabel":"enum\u003cstring>[] | null"}},"additionalProperties":false,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.self.oneOf.1","typeLabel":"object"},{"type":"null","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.self.oneOf.2","typeLabel":"null"}],"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.self","typeLabel":"object · object · null"},"items":{"oneOf":[{"type":"object","description":"Configuration for the array item node of this array property.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.0.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.0.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.0.enabled_stats.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.0.enabled_stats","typeLabel":"enum\u003cstring>[] | null"},"self":{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.0.self","typeLabel":"null"},"properties":{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.0.properties","typeLabel":"null"},"items":{"oneOf":[{"type":"null","description":"Configuration for the array item node.","uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.0.\\items.oneOf.0","typeLabel":"null"},{"type":"null","description":"Configuration for the array item node.","uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.0.\\items.oneOf.1","typeLabel":"null"}],"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.0.\\items","typeLabel":"null"},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.0.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.0.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.0.stat_options.oneOf.0.histogram","typeLabel":"object"}},"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.0.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.0.stat_options.oneOf.1","typeLabel":"null"}],"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.0.stat_options","typeLabel":"object | null"}},"additionalProperties":false,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.0","typeLabel":"object"},{"type":"object","description":"Configuration for the array item node of this array property.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.1.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.1.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.1.stat_options.oneOf.0.histogram","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.1.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.1.stat_options.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.1.stat_options","typeLabel":"object | null"},"self":{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.1.self","typeLabel":"null"},"properties":{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.1.properties","typeLabel":"null"},"items":{"oneOf":[{"type":"null","description":"Configuration for the array item node.","uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.1.\\items.oneOf.0","typeLabel":"null"},{"type":"null","description":"Configuration for the array item node.","uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.1.\\items.oneOf.1","typeLabel":"null"}],"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.1.\\items","typeLabel":"null"},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.1.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.1.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.1.enabled_stats.oneOf.1","typeLabel":"null"}],"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.1.enabled_stats","typeLabel":"enum\u003cstring>[] | null"}},"additionalProperties":false,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.1","typeLabel":"object"},{"type":"object","description":"Configuration for the array item node of this array property.","required":["self"],"properties":{"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.self.oneOf.0.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.self.oneOf.0.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.self.oneOf.0.enabled_stats.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.self.oneOf.0.enabled_stats","typeLabel":"enum\u003cstring>[] | null"},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.self.oneOf.0.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.self.oneOf.0.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.self.oneOf.0.stat_options.oneOf.0.histogram","typeLabel":"object"}},"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.self.oneOf.0.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.self.oneOf.0.stat_options.oneOf.1","typeLabel":"null"}],"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.self.oneOf.0.stat_options","typeLabel":"object | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.self.oneOf.0","typeLabel":"object"},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.self.oneOf.1.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.self.oneOf.1.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.self.oneOf.1.stat_options.oneOf.0.histogram","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.self.oneOf.1.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.self.oneOf.1.stat_options.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.self.oneOf.1.stat_options","typeLabel":"object | null"},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.self.oneOf.1.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.self.oneOf.1.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.self.oneOf.1.enabled_stats.oneOf.1","typeLabel":"null"}],"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.self.oneOf.1.enabled_stats","typeLabel":"enum\u003cstring>[] | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.self.oneOf.1","typeLabel":"object"},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","isRequired":true,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.self.oneOf.2","typeLabel":"null"}],"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.self","typeLabel":"object · object · null"},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.enabled_stats","typeLabel":"null"},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.stat_options","typeLabel":"null"},"properties":{"oneOf":[{"type":"array","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"},"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.properties.oneOf.0","typeLabel":"array"},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"},"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.properties.oneOf.1","typeLabel":"null"}],"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.properties","typeLabel":"array | null"},"items":{"oneOf":[{"description":"Configuration for the array item node.","uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.\\items.oneOf.0","typeLabel":"any"},{"type":"null","description":"Configuration for the array item node.","uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.\\items.oneOf.1","typeLabel":"null"}],"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.\\items","typeLabel":"any | null"}},"additionalProperties":false,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2","typeLabel":"object"},{"type":"object","description":"Configuration for the array item node of this array property.","required":["properties"],"properties":{"properties":{"oneOf":[{"type":"array","items":{"oneOf":[{}],"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.properties.oneOf.0.items.[INDEX]","typeLabel":"any"},"description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.properties.oneOf.0","typeLabel":"any[]"},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.properties.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.properties","typeLabel":"any[] | null"},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.enabled_stats","typeLabel":"null"},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.stat_options","typeLabel":"null"},"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.self.oneOf.0.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.self.oneOf.0.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.self.oneOf.0.enabled_stats.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.self.oneOf.0.enabled_stats","typeLabel":"enum\u003cstring>[] | null"},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.self.oneOf.0.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.self.oneOf.0.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.self.oneOf.0.stat_options.oneOf.0.histogram","typeLabel":"object"}},"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.self.oneOf.0.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.self.oneOf.0.stat_options.oneOf.1","typeLabel":"null"}],"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.self.oneOf.0.stat_options","typeLabel":"object | null"}},"additionalProperties":false,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.self.oneOf.0","typeLabel":"object"},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.self.oneOf.1.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.self.oneOf.1.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.self.oneOf.1.stat_options.oneOf.0.histogram","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.self.oneOf.1.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.self.oneOf.1.stat_options.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.self.oneOf.1.stat_options","typeLabel":"object | null"},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.self.oneOf.1.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.self.oneOf.1.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.self.oneOf.1.enabled_stats.oneOf.1","typeLabel":"null"}],"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.self.oneOf.1.enabled_stats","typeLabel":"enum\u003cstring>[] | null"}},"additionalProperties":false,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.self.oneOf.1","typeLabel":"object"},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.self.oneOf.2","typeLabel":"null"}],"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.self","typeLabel":"object · object · null"},"items":{"oneOf":[{"description":"Configuration for the array item node.","uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.\\items.oneOf.0","typeLabel":"any"},{"type":"null","description":"Configuration for the array item node.","uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.\\items.oneOf.1","typeLabel":"null"}],"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.\\items","typeLabel":"any | null"}},"additionalProperties":false,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3","typeLabel":"object"},{"type":"object","description":"Configuration for the array item node of this array property.","required":["items"],"properties":{"items":{"oneOf":[{"description":"Configuration for the array item node.","isRequired":true,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.\\items.oneOf.0","typeLabel":"any"},{"type":"null","description":"Configuration for the array item node.","isRequired":true,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.\\items.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.\\items","typeLabel":"any | null"},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.enabled_stats","typeLabel":"null"},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.stat_options","typeLabel":"null"},"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.self.oneOf.0.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.self.oneOf.0.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.self.oneOf.0.enabled_stats.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.self.oneOf.0.enabled_stats","typeLabel":"enum\u003cstring>[] | null"},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.self.oneOf.0.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.self.oneOf.0.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.self.oneOf.0.stat_options.oneOf.0.histogram","typeLabel":"object"}},"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.self.oneOf.0.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.self.oneOf.0.stat_options.oneOf.1","typeLabel":"null"}],"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.self.oneOf.0.stat_options","typeLabel":"object | null"}},"additionalProperties":false,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.self.oneOf.0","typeLabel":"object"},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.self.oneOf.1.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.self.oneOf.1.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.self.oneOf.1.stat_options.oneOf.0.histogram","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.self.oneOf.1.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.self.oneOf.1.stat_options.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.self.oneOf.1.stat_options","typeLabel":"object | null"},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.self.oneOf.1.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.self.oneOf.1.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.self.oneOf.1.enabled_stats.oneOf.1","typeLabel":"null"}],"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.self.oneOf.1.enabled_stats","typeLabel":"enum\u003cstring>[] | null"}},"additionalProperties":false,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.self.oneOf.1","typeLabel":"object"},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.self.oneOf.2","typeLabel":"null"}],"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.self","typeLabel":"object · object · null"},"properties":{"oneOf":[{"type":"array","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"},"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.properties.oneOf.0","typeLabel":"array"},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"},"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.properties.oneOf.1","typeLabel":"null"}],"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.properties","typeLabel":"array | null"}},"additionalProperties":false,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4","typeLabel":"object"},{"type":"null","description":"Configuration for the array item node of this array property.","uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.5","typeLabel":"null"}],"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items","typeLabel":"object · object · object · object · object · null"}},"additionalProperties":false,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3","typeLabel":"object"},{"type":"object","description":"Statistics configuration for a named property of an object node. The property may itself be primitive or non-primitive (recursive). A property must carry at least one configuration field — there is no no-op/inherited variant at the nested level. If a property is listed, it must specify what stats to compute. approx_count_distinct and count_distinct are mutually exclusive — the server rejects any request that includes both in the same enabled_stats array.","required":["path","items"],"properties":{"items":{"oneOf":[{"type":"object","description":"Configuration for the array item node of this array property.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.0.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.0.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.0.enabled_stats.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.0.enabled_stats","typeLabel":"enum\u003cstring>[] | null"},"self":{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.0.self","typeLabel":"null"},"properties":{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.0.properties","typeLabel":"null"},"items":{"oneOf":[{"type":"null","description":"Configuration for the array item node.","uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.0.\\items.oneOf.0","typeLabel":"null"},{"type":"null","description":"Configuration for the array item node.","uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.0.\\items.oneOf.1","typeLabel":"null"}],"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.0.\\items","typeLabel":"null"},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.0.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.0.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.0.stat_options.oneOf.0.histogram","typeLabel":"object"}},"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.0.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.0.stat_options.oneOf.1","typeLabel":"null"}],"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.0.stat_options","typeLabel":"object | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.0","typeLabel":"object"},{"type":"object","description":"Configuration for the array item node of this array property.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.1.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.1.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.1.stat_options.oneOf.0.histogram","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.1.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.1.stat_options.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.1.stat_options","typeLabel":"object | null"},"self":{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.1.self","typeLabel":"null"},"properties":{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.1.properties","typeLabel":"null"},"items":{"oneOf":[{"type":"null","description":"Configuration for the array item node.","uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.1.\\items.oneOf.0","typeLabel":"null"},{"type":"null","description":"Configuration for the array item node.","uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.1.\\items.oneOf.1","typeLabel":"null"}],"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.1.\\items","typeLabel":"null"},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.1.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.1.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.1.enabled_stats.oneOf.1","typeLabel":"null"}],"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.1.enabled_stats","typeLabel":"enum\u003cstring>[] | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.1","typeLabel":"object"},{"type":"object","description":"Configuration for the array item node of this array property.","required":["self"],"properties":{"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.self.oneOf.0.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.self.oneOf.0.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.self.oneOf.0.enabled_stats.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.self.oneOf.0.enabled_stats","typeLabel":"enum\u003cstring>[] | null"},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.self.oneOf.0.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.self.oneOf.0.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.self.oneOf.0.stat_options.oneOf.0.histogram","typeLabel":"object"}},"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.self.oneOf.0.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.self.oneOf.0.stat_options.oneOf.1","typeLabel":"null"}],"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.self.oneOf.0.stat_options","typeLabel":"object | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.self.oneOf.0","typeLabel":"object"},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.self.oneOf.1.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.self.oneOf.1.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.self.oneOf.1.stat_options.oneOf.0.histogram","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.self.oneOf.1.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.self.oneOf.1.stat_options.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.self.oneOf.1.stat_options","typeLabel":"object | null"},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.self.oneOf.1.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.self.oneOf.1.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.self.oneOf.1.enabled_stats.oneOf.1","typeLabel":"null"}],"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.self.oneOf.1.enabled_stats","typeLabel":"enum\u003cstring>[] | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.self.oneOf.1","typeLabel":"object"},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","isRequired":true,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.self.oneOf.2","typeLabel":"null"}],"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.self","typeLabel":"object · object · null"},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.enabled_stats","typeLabel":"null"},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.stat_options","typeLabel":"null"},"properties":{"oneOf":[{"type":"array","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"},"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.properties.oneOf.0","typeLabel":"array"},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"},"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.properties.oneOf.1","typeLabel":"null"}],"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.properties","typeLabel":"array | null"},"items":{"oneOf":[{"description":"Configuration for the array item node.","uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.\\items.oneOf.0","typeLabel":"any"},{"type":"null","description":"Configuration for the array item node.","uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.\\items.oneOf.1","typeLabel":"null"}],"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.\\items","typeLabel":"any | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2","typeLabel":"object"},{"type":"object","description":"Configuration for the array item node of this array property.","required":["properties"],"properties":{"properties":{"oneOf":[{"type":"array","items":{"oneOf":[{}],"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.properties.oneOf.0.items.[INDEX]","typeLabel":"any"},"description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.properties.oneOf.0","typeLabel":"any[]"},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.properties.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.properties","typeLabel":"any[] | null"},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.enabled_stats","typeLabel":"null"},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.stat_options","typeLabel":"null"},"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.self.oneOf.0.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.self.oneOf.0.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.self.oneOf.0.enabled_stats.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.self.oneOf.0.enabled_stats","typeLabel":"enum\u003cstring>[] | null"},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.self.oneOf.0.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.self.oneOf.0.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.self.oneOf.0.stat_options.oneOf.0.histogram","typeLabel":"object"}},"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.self.oneOf.0.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.self.oneOf.0.stat_options.oneOf.1","typeLabel":"null"}],"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.self.oneOf.0.stat_options","typeLabel":"object | null"}},"additionalProperties":false,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.self.oneOf.0","typeLabel":"object"},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.self.oneOf.1.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.self.oneOf.1.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.self.oneOf.1.stat_options.oneOf.0.histogram","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.self.oneOf.1.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.self.oneOf.1.stat_options.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.self.oneOf.1.stat_options","typeLabel":"object | null"},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.self.oneOf.1.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.self.oneOf.1.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.self.oneOf.1.enabled_stats.oneOf.1","typeLabel":"null"}],"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.self.oneOf.1.enabled_stats","typeLabel":"enum\u003cstring>[] | null"}},"additionalProperties":false,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.self.oneOf.1","typeLabel":"object"},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.self.oneOf.2","typeLabel":"null"}],"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.self","typeLabel":"object · object · null"},"items":{"oneOf":[{"description":"Configuration for the array item node.","uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.\\items.oneOf.0","typeLabel":"any"},{"type":"null","description":"Configuration for the array item node.","uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.\\items.oneOf.1","typeLabel":"null"}],"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.\\items","typeLabel":"any | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3","typeLabel":"object"},{"type":"object","description":"Configuration for the array item node of this array property.","required":["items"],"properties":{"items":{"oneOf":[{"description":"Configuration for the array item node.","isRequired":true,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.\\items.oneOf.0","typeLabel":"any"},{"type":"null","description":"Configuration for the array item node.","isRequired":true,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.\\items.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.\\items","typeLabel":"any | null"},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.enabled_stats","typeLabel":"null"},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.stat_options","typeLabel":"null"},"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.self.oneOf.0.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.self.oneOf.0.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.self.oneOf.0.enabled_stats.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.self.oneOf.0.enabled_stats","typeLabel":"enum\u003cstring>[] | null"},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.self.oneOf.0.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.self.oneOf.0.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.self.oneOf.0.stat_options.oneOf.0.histogram","typeLabel":"object"}},"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.self.oneOf.0.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.self.oneOf.0.stat_options.oneOf.1","typeLabel":"null"}],"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.self.oneOf.0.stat_options","typeLabel":"object | null"}},"additionalProperties":false,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.self.oneOf.0","typeLabel":"object"},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.self.oneOf.1.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.self.oneOf.1.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.self.oneOf.1.stat_options.oneOf.0.histogram","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.self.oneOf.1.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.self.oneOf.1.stat_options.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.self.oneOf.1.stat_options","typeLabel":"object | null"},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.self.oneOf.1.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.self.oneOf.1.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.self.oneOf.1.enabled_stats.oneOf.1","typeLabel":"null"}],"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.self.oneOf.1.enabled_stats","typeLabel":"enum\u003cstring>[] | null"}},"additionalProperties":false,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.self.oneOf.1","typeLabel":"object"},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.self.oneOf.2","typeLabel":"null"}],"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.self","typeLabel":"object · object · null"},"properties":{"oneOf":[{"type":"array","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"},"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.properties.oneOf.0","typeLabel":"array"},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"},"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.properties.oneOf.1","typeLabel":"null"}],"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.properties","typeLabel":"array | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4","typeLabel":"object"},{"type":"null","description":"Configuration for the array item node of this array property.","isRequired":true,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.5","typeLabel":"null"}],"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items","typeLabel":"object · object · object · object · object · null"},"path":{"type":"string","description":"Name of the child property relative to the parent object node. Must be a valid identifier (alphanumeric and underscores, max 256 chars).","maxLength":256,"pattern":"^[a-zA-Z0-9_]+$","isRequired":true,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.path","typeLabel":"string"},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.enabled_stats","typeLabel":"null"},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.stat_options","typeLabel":"null"},"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.self.oneOf.0.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.self.oneOf.0.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.self.oneOf.0.enabled_stats.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.self.oneOf.0.enabled_stats","typeLabel":"enum\u003cstring>[] | null"},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.self.oneOf.0.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.self.oneOf.0.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.self.oneOf.0.stat_options.oneOf.0.histogram","typeLabel":"object"}},"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.self.oneOf.0.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.self.oneOf.0.stat_options.oneOf.1","typeLabel":"null"}],"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.self.oneOf.0.stat_options","typeLabel":"object | null"}},"additionalProperties":false,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.self.oneOf.0","typeLabel":"object"},{"type":"object","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.self.oneOf.1.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.self.oneOf.1.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.self.oneOf.1.stat_options.oneOf.0.histogram","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.self.oneOf.1.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.self.oneOf.1.stat_options.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.self.oneOf.1.stat_options","typeLabel":"object | null"},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.self.oneOf.1.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.self.oneOf.1.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.self.oneOf.1.enabled_stats.oneOf.1","typeLabel":"null"}],"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.self.oneOf.1.enabled_stats","typeLabel":"enum\u003cstring>[] | null"}},"additionalProperties":false,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.self.oneOf.1","typeLabel":"object"},{"type":"null","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.self.oneOf.2","typeLabel":"null"}],"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.self","typeLabel":"object · object · null"},"properties":{"oneOf":[{"type":"array","description":"Explicit configurations for named child properties of this object property. Only listed children receive stats — unlisted ones are skipped entirely.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"},"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.properties.oneOf.0","typeLabel":"array"},{"type":"null","description":"Explicit configurations for named child properties of this object property. Only listed children receive stats — unlisted ones are skipped entirely.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"},"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.properties.oneOf.1","typeLabel":"null"}],"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.properties","typeLabel":"array | null"}},"additionalProperties":false,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4","typeLabel":"object"}],"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX]","typeLabel":"object"},"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0","typeLabel":"object[]"},{"type":"null","description":"Explicit configurations for named child properties of an object field. Only listed children receive stats — unlisted ones are skipped entirely.","minItems":1,"items":{"oneOf":[{"type":"object","description":"Statistics configuration for a named property of an object node. The property may itself be primitive or non-primitive (recursive). A property must carry at least one configuration field — there is no no-op/inherited variant at the nested level. If a property is listed, it must specify what stats to compute. approx_count_distinct and count_distinct are mutually exclusive — the server rejects any request that includes both in the same enabled_stats array.","required":["path","enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"self":{"type":"null","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."},"properties":{"type":"null","description":"Explicit configurations for named child properties of this object property. Only listed children receive stats — unlisted ones are skipped entirely.","minItems":1},"items":{"type":"null","description":"Configuration for the array item node of this array property."},"path":{"type":"string","description":"Name of the child property relative to the parent object node. Must be a valid identifier (alphanumeric and underscores, max 256 chars).","maxLength":256,"pattern":"^[a-zA-Z0-9_]+$"},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Statistics configuration for a named property of an object node. The property may itself be primitive or non-primitive (recursive). A property must carry at least one configuration field — there is no no-op/inherited variant at the nested level. If a property is listed, it must specify what stats to compute. approx_count_distinct and count_distinct are mutually exclusive — the server rejects any request that includes both in the same enabled_stats array.","required":["path","stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"self":{"type":"null","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."},"properties":{"type":"null","description":"Explicit configurations for named child properties of this object property. Only listed children receive stats — unlisted ones are skipped entirely.","minItems":1},"items":{"type":"null","description":"Configuration for the array item node of this array property."},"path":{"type":"string","description":"Name of the child property relative to the parent object node. Must be a valid identifier (alphanumeric and underscores, max 256 chars).","maxLength":256,"pattern":"^[a-zA-Z0-9_]+$"},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"object","description":"Statistics configuration for a named property of an object node. The property may itself be primitive or non-primitive (recursive). A property must carry at least one configuration field — there is no no-op/inherited variant at the nested level. If a property is listed, it must specify what stats to compute. approx_count_distinct and count_distinct are mutually exclusive — the server rejects any request that includes both in the same enabled_stats array.","required":["path","self"],"properties":{"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"null","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."}]},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},"path":{"type":"string","description":"Name of the child property relative to the parent object node. Must be a valid identifier (alphanumeric and underscores, max 256 chars).","maxLength":256,"pattern":"^[a-zA-Z0-9_]+$"},"properties":{"oneOf":[{"type":"array","description":"Explicit configurations for named child properties of this object property. Only listed children receive stats — unlisted ones are skipped entirely.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}},{"type":"null","description":"Explicit configurations for named child properties of this object property. Only listed children receive stats — unlisted ones are skipped entirely.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}}]},"items":{"oneOf":[{"type":"object","description":"Configuration for the array item node of this array property.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"self":{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."},"properties":{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1},"items":{"oneOf":[{"type":"null","description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Configuration for the array item node of this array property.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"self":{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."},"properties":{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1},"items":{"oneOf":[{"type":"null","description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"object","description":"Configuration for the array item node of this array property.","required":["self"],"properties":{"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."}]},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},"properties":{"oneOf":[{"type":"array","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}}]},"items":{"oneOf":[{"description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]}},"additionalProperties":false},{"type":"object","description":"Configuration for the array item node of this array property.","required":["properties"],"properties":{"properties":{"oneOf":[{"type":"array","items":{"oneOf":[{}]},"description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1}]},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."}]},"items":{"oneOf":[{"description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]}},"additionalProperties":false},{"type":"object","description":"Configuration for the array item node of this array property.","required":["items"],"properties":{"items":{"oneOf":[{"description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."}]},"properties":{"oneOf":[{"type":"array","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}}]}},"additionalProperties":false},{"type":"null","description":"Configuration for the array item node of this array property."}]}},"additionalProperties":false},{"type":"object","description":"Statistics configuration for a named property of an object node. The property may itself be primitive or non-primitive (recursive). A property must carry at least one configuration field — there is no no-op/inherited variant at the nested level. If a property is listed, it must specify what stats to compute. approx_count_distinct and count_distinct are mutually exclusive — the server rejects any request that includes both in the same enabled_stats array.","required":["path","properties"],"properties":{"properties":{"oneOf":[{"type":"array","items":{"oneOf":[{}]},"description":"Explicit configurations for named child properties of this object property. Only listed children receive stats — unlisted ones are skipped entirely.","minItems":1},{"type":"null","description":"Explicit configurations for named child properties of this object property. Only listed children receive stats — unlisted ones are skipped entirely.","minItems":1}]},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},"path":{"type":"string","description":"Name of the child property relative to the parent object node. Must be a valid identifier (alphanumeric and underscores, max 256 chars).","maxLength":256,"pattern":"^[a-zA-Z0-9_]+$"},"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"null","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."}]},"items":{"oneOf":[{"type":"object","description":"Configuration for the array item node of this array property.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"self":{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."},"properties":{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1},"items":{"oneOf":[{"type":"null","description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Configuration for the array item node of this array property.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"self":{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."},"properties":{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1},"items":{"oneOf":[{"type":"null","description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"object","description":"Configuration for the array item node of this array property.","required":["self"],"properties":{"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."}]},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},"properties":{"oneOf":[{"type":"array","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}}]},"items":{"oneOf":[{"description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]}},"additionalProperties":false},{"type":"object","description":"Configuration for the array item node of this array property.","required":["properties"],"properties":{"properties":{"oneOf":[{"type":"array","items":{"oneOf":[{}]},"description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1}]},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."}]},"items":{"oneOf":[{"description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]}},"additionalProperties":false},{"type":"object","description":"Configuration for the array item node of this array property.","required":["items"],"properties":{"items":{"oneOf":[{"description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."}]},"properties":{"oneOf":[{"type":"array","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}}]}},"additionalProperties":false},{"type":"null","description":"Configuration for the array item node of this array property."}]}},"additionalProperties":false},{"type":"object","description":"Statistics configuration for a named property of an object node. The property may itself be primitive or non-primitive (recursive). A property must carry at least one configuration field — there is no no-op/inherited variant at the nested level. If a property is listed, it must specify what stats to compute. approx_count_distinct and count_distinct are mutually exclusive — the server rejects any request that includes both in the same enabled_stats array.","required":["path","items"],"properties":{"items":{"oneOf":[{"type":"object","description":"Configuration for the array item node of this array property.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"self":{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."},"properties":{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1},"items":{"oneOf":[{"type":"null","description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Configuration for the array item node of this array property.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"self":{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."},"properties":{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1},"items":{"oneOf":[{"type":"null","description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"object","description":"Configuration for the array item node of this array property.","required":["self"],"properties":{"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."}]},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},"properties":{"oneOf":[{"type":"array","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}}]},"items":{"oneOf":[{"description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]}},"additionalProperties":false},{"type":"object","description":"Configuration for the array item node of this array property.","required":["properties"],"properties":{"properties":{"oneOf":[{"type":"array","items":{"oneOf":[{}]},"description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1}]},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."}]},"items":{"oneOf":[{"description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]}},"additionalProperties":false},{"type":"object","description":"Configuration for the array item node of this array property.","required":["items"],"properties":{"items":{"oneOf":[{"description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."}]},"properties":{"oneOf":[{"type":"array","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}}]}},"additionalProperties":false},{"type":"null","description":"Configuration for the array item node of this array property."}]},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},"path":{"type":"string","description":"Name of the child property relative to the parent object node. Must be a valid identifier (alphanumeric and underscores, max 256 chars).","maxLength":256,"pattern":"^[a-zA-Z0-9_]+$"},"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"null","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."}]},"properties":{"oneOf":[{"type":"array","description":"Explicit configurations for named child properties of this object property. Only listed children receive stats — unlisted ones are skipped entirely.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}},{"type":"null","description":"Explicit configurations for named child properties of this object property. Only listed children receive stats — unlisted ones are skipped entirely.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}}]}},"additionalProperties":false}]},"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.1","typeLabel":"null"}],"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties","typeLabel":"object[] | null"},"items":{"oneOf":[{"type":"object","description":"Configuration for the array item node.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.0.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.0.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.0.enabled_stats.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.0.enabled_stats","typeLabel":"enum\u003cstring>[] | null"},"self":{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.0.self","typeLabel":"null"},"properties":{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.0.properties","typeLabel":"null"},"items":{"oneOf":[{"type":"null","description":"Configuration for the array item node.","uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.0.\\items.oneOf.0","typeLabel":"null"},{"type":"null","description":"Configuration for the array item node.","uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.0.\\items.oneOf.1","typeLabel":"null"}],"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.0.\\items","typeLabel":"null"},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.0.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.0.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.0.stat_options.oneOf.0.histogram","typeLabel":"object"}},"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.0.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.0.stat_options.oneOf.1","typeLabel":"null"}],"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.0.stat_options","typeLabel":"object | null"}},"additionalProperties":false,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.0","typeLabel":"object"},{"type":"object","description":"Configuration for the array item node.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.1.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.1.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.1.stat_options.oneOf.0.histogram","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.1.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.1.stat_options.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.1.stat_options","typeLabel":"object | null"},"self":{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.1.self","typeLabel":"null"},"properties":{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.1.properties","typeLabel":"null"},"items":{"oneOf":[{"type":"null","description":"Configuration for the array item node.","uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.1.\\items.oneOf.0","typeLabel":"null"},{"type":"null","description":"Configuration for the array item node.","uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.1.\\items.oneOf.1","typeLabel":"null"}],"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.1.\\items","typeLabel":"null"},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.1.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.1.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.1.enabled_stats.oneOf.1","typeLabel":"null"}],"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.1.enabled_stats","typeLabel":"enum\u003cstring>[] | null"}},"additionalProperties":false,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.1","typeLabel":"object"},{"type":"object","description":"Configuration for the array item node.","required":["self"],"properties":{"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.self.oneOf.0.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.self.oneOf.0.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.self.oneOf.0.enabled_stats.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.self.oneOf.0.enabled_stats","typeLabel":"enum\u003cstring>[] | null"},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.self.oneOf.0.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.self.oneOf.0.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.self.oneOf.0.stat_options.oneOf.0.histogram","typeLabel":"object"}},"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.self.oneOf.0.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.self.oneOf.0.stat_options.oneOf.1","typeLabel":"null"}],"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.self.oneOf.0.stat_options","typeLabel":"object | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.self.oneOf.0","typeLabel":"object"},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.self.oneOf.1.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.self.oneOf.1.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.self.oneOf.1.stat_options.oneOf.0.histogram","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.self.oneOf.1.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.self.oneOf.1.stat_options.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.self.oneOf.1.stat_options","typeLabel":"object | null"},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.self.oneOf.1.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.self.oneOf.1.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.self.oneOf.1.enabled_stats.oneOf.1","typeLabel":"null"}],"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.self.oneOf.1.enabled_stats","typeLabel":"enum\u003cstring>[] | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.self.oneOf.1","typeLabel":"object"},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","isRequired":true,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.self.oneOf.2","typeLabel":"null"}],"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.self","typeLabel":"object · object · null"},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.enabled_stats","typeLabel":"null"},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.stat_options","typeLabel":"null"},"properties":{"oneOf":[{"type":"array","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"},"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.properties.oneOf.0","typeLabel":"array"},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"},"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.properties.oneOf.1","typeLabel":"null"}],"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.properties","typeLabel":"array | null"},"items":{"oneOf":[{"description":"Configuration for the array item node.","uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.\\items.oneOf.0","typeLabel":"any"},{"type":"null","description":"Configuration for the array item node.","uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.\\items.oneOf.1","typeLabel":"null"}],"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.\\items","typeLabel":"any | null"}},"additionalProperties":false,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.2","typeLabel":"object"},{"type":"object","description":"Configuration for the array item node.","required":["properties"],"properties":{"properties":{"oneOf":[{"type":"array","items":{"oneOf":[{}],"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.properties.oneOf.0.items.[INDEX]","typeLabel":"any"},"description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.properties.oneOf.0","typeLabel":"any[]"},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.properties.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.properties","typeLabel":"any[] | null"},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.enabled_stats","typeLabel":"null"},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.stat_options","typeLabel":"null"},"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.self.oneOf.0.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.self.oneOf.0.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.self.oneOf.0.enabled_stats.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.self.oneOf.0.enabled_stats","typeLabel":"enum\u003cstring>[] | null"},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.self.oneOf.0.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.self.oneOf.0.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.self.oneOf.0.stat_options.oneOf.0.histogram","typeLabel":"object"}},"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.self.oneOf.0.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.self.oneOf.0.stat_options.oneOf.1","typeLabel":"null"}],"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.self.oneOf.0.stat_options","typeLabel":"object | null"}},"additionalProperties":false,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.self.oneOf.0","typeLabel":"object"},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.self.oneOf.1.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.self.oneOf.1.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.self.oneOf.1.stat_options.oneOf.0.histogram","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.self.oneOf.1.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.self.oneOf.1.stat_options.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.self.oneOf.1.stat_options","typeLabel":"object | null"},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.self.oneOf.1.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.self.oneOf.1.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.self.oneOf.1.enabled_stats.oneOf.1","typeLabel":"null"}],"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.self.oneOf.1.enabled_stats","typeLabel":"enum\u003cstring>[] | null"}},"additionalProperties":false,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.self.oneOf.1","typeLabel":"object"},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.self.oneOf.2","typeLabel":"null"}],"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.self","typeLabel":"object · object · null"},"items":{"oneOf":[{"description":"Configuration for the array item node.","uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.\\items.oneOf.0","typeLabel":"any"},{"type":"null","description":"Configuration for the array item node.","uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.\\items.oneOf.1","typeLabel":"null"}],"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.\\items","typeLabel":"any | null"}},"additionalProperties":false,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.3","typeLabel":"object"},{"type":"object","description":"Configuration for the array item node.","required":["items"],"properties":{"items":{"oneOf":[{"description":"Configuration for the array item node.","isRequired":true,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.\\items.oneOf.0","typeLabel":"any"},{"type":"null","description":"Configuration for the array item node.","isRequired":true,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.\\items.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.\\items","typeLabel":"any | null"},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.enabled_stats","typeLabel":"null"},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.stat_options","typeLabel":"null"},"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.self.oneOf.0.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.self.oneOf.0.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.self.oneOf.0.enabled_stats.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.self.oneOf.0.enabled_stats","typeLabel":"enum\u003cstring>[] | null"},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.self.oneOf.0.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.self.oneOf.0.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.self.oneOf.0.stat_options.oneOf.0.histogram","typeLabel":"object"}},"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.self.oneOf.0.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.self.oneOf.0.stat_options.oneOf.1","typeLabel":"null"}],"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.self.oneOf.0.stat_options","typeLabel":"object | null"}},"additionalProperties":false,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.self.oneOf.0","typeLabel":"object"},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.self.oneOf.1.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.self.oneOf.1.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.self.oneOf.1.stat_options.oneOf.0.histogram","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.self.oneOf.1.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.self.oneOf.1.stat_options.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.self.oneOf.1.stat_options","typeLabel":"object | null"},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.self.oneOf.1.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.self.oneOf.1.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.self.oneOf.1.enabled_stats.oneOf.1","typeLabel":"null"}],"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.self.oneOf.1.enabled_stats","typeLabel":"enum\u003cstring>[] | null"}},"additionalProperties":false,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.self.oneOf.1","typeLabel":"object"},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.self.oneOf.2","typeLabel":"null"}],"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.self","typeLabel":"object · object · null"},"properties":{"oneOf":[{"type":"array","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"},"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.properties.oneOf.0","typeLabel":"array"},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"},"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.properties.oneOf.1","typeLabel":"null"}],"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.properties","typeLabel":"array | null"}},"additionalProperties":false,"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.4","typeLabel":"object"},{"type":"null","description":"Configuration for the array item node.","uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.5","typeLabel":"null"}],"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items","typeLabel":"object · object · object · object · object · null"}},"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX]","typeLabel":"object"},"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.0","typeLabel":"object[]"},{"type":"null","description":"Per-field overrides for individual Rosetta Stone attributes.","items":{"type":"object","description":"Common stat configuration shared by dataset and Rosetta Stone field configs. Exactly one of three modes must be used (the server rejects invalid combinations):\n\n1. **Primitive field** — provide enabled_stats and/or stat_options at the top level.\n Must not include self, properties, or items.\n\n2. **Non-primitive field** — provide self, properties, and/or items for nested structure.\n Must not include enabled_stats or stat_options at this level;\n use self for node-level stat configuration instead.\n\n3. **No-op / inherit** — leave all stat fields null or absent. The field inherits its\n configuration from the namespace scope or global defaults.\n\n\nThis schema deliberately has no `oneOf` over the three modes. Mode 3 is all five slots null, which matches neither of the other two, so a closed union here would reject it.\nClosing this schema is left to the two that compose it. `additionalProperties: false` here would only see the properties below, so it would reject the `field_name` and `attribute_name` its siblings contribute; `DatasetFieldConfig` and `RosettaStoneFieldConfig` use `unevaluatedProperties: false`, which sees the whole composition.","required":["attribute_name"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]},"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive field node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Statistics for the non-primitive field node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"null","description":"Statistics for the non-primitive field node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."}]},"properties":{"oneOf":[{"type":"array","description":"Explicit configurations for named child properties of an object field. Only listed children receive stats — unlisted ones are skipped entirely.","minItems":1,"items":{"oneOf":[{"type":"object","description":"Statistics configuration for a named property of an object node. The property may itself be primitive or non-primitive (recursive). A property must carry at least one configuration field — there is no no-op/inherited variant at the nested level. If a property is listed, it must specify what stats to compute. approx_count_distinct and count_distinct are mutually exclusive — the server rejects any request that includes both in the same enabled_stats array.","required":["path","enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"self":{"type":"null","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."},"properties":{"type":"null","description":"Explicit configurations for named child properties of this object property. Only listed children receive stats — unlisted ones are skipped entirely.","minItems":1},"items":{"type":"null","description":"Configuration for the array item node of this array property."},"path":{"type":"string","description":"Name of the child property relative to the parent object node. Must be a valid identifier (alphanumeric and underscores, max 256 chars).","maxLength":256,"pattern":"^[a-zA-Z0-9_]+$"},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Statistics configuration for a named property of an object node. The property may itself be primitive or non-primitive (recursive). A property must carry at least one configuration field — there is no no-op/inherited variant at the nested level. If a property is listed, it must specify what stats to compute. approx_count_distinct and count_distinct are mutually exclusive — the server rejects any request that includes both in the same enabled_stats array.","required":["path","stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"self":{"type":"null","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."},"properties":{"type":"null","description":"Explicit configurations for named child properties of this object property. Only listed children receive stats — unlisted ones are skipped entirely.","minItems":1},"items":{"type":"null","description":"Configuration for the array item node of this array property."},"path":{"type":"string","description":"Name of the child property relative to the parent object node. Must be a valid identifier (alphanumeric and underscores, max 256 chars).","maxLength":256,"pattern":"^[a-zA-Z0-9_]+$"},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"object","description":"Statistics configuration for a named property of an object node. The property may itself be primitive or non-primitive (recursive). A property must carry at least one configuration field — there is no no-op/inherited variant at the nested level. If a property is listed, it must specify what stats to compute. approx_count_distinct and count_distinct are mutually exclusive — the server rejects any request that includes both in the same enabled_stats array.","required":["path","self"],"properties":{"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"null","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."}]},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},"path":{"type":"string","description":"Name of the child property relative to the parent object node. Must be a valid identifier (alphanumeric and underscores, max 256 chars).","maxLength":256,"pattern":"^[a-zA-Z0-9_]+$"},"properties":{"oneOf":[{"type":"array","description":"Explicit configurations for named child properties of this object property. Only listed children receive stats — unlisted ones are skipped entirely.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}},{"type":"null","description":"Explicit configurations for named child properties of this object property. Only listed children receive stats — unlisted ones are skipped entirely.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}}]},"items":{"oneOf":[{"type":"object","description":"Configuration for the array item node of this array property.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"self":{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."},"properties":{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1},"items":{"oneOf":[{"type":"null","description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Configuration for the array item node of this array property.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"self":{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."},"properties":{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1},"items":{"oneOf":[{"type":"null","description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"object","description":"Configuration for the array item node of this array property.","required":["self"],"properties":{"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."}]},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},"properties":{"oneOf":[{"type":"array","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}}]},"items":{"oneOf":[{"description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]}},"additionalProperties":false},{"type":"object","description":"Configuration for the array item node of this array property.","required":["properties"],"properties":{"properties":{"oneOf":[{"type":"array","items":{"oneOf":[{}]},"description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1}]},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."}]},"items":{"oneOf":[{"description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]}},"additionalProperties":false},{"type":"object","description":"Configuration for the array item node of this array property.","required":["items"],"properties":{"items":{"oneOf":[{"description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."}]},"properties":{"oneOf":[{"type":"array","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}}]}},"additionalProperties":false},{"type":"null","description":"Configuration for the array item node of this array property."}]}},"additionalProperties":false},{"type":"object","description":"Statistics configuration for a named property of an object node. The property may itself be primitive or non-primitive (recursive). A property must carry at least one configuration field — there is no no-op/inherited variant at the nested level. If a property is listed, it must specify what stats to compute. approx_count_distinct and count_distinct are mutually exclusive — the server rejects any request that includes both in the same enabled_stats array.","required":["path","properties"],"properties":{"properties":{"oneOf":[{"type":"array","items":{"oneOf":[{}]},"description":"Explicit configurations for named child properties of this object property. Only listed children receive stats — unlisted ones are skipped entirely.","minItems":1},{"type":"null","description":"Explicit configurations for named child properties of this object property. Only listed children receive stats — unlisted ones are skipped entirely.","minItems":1}]},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},"path":{"type":"string","description":"Name of the child property relative to the parent object node. Must be a valid identifier (alphanumeric and underscores, max 256 chars).","maxLength":256,"pattern":"^[a-zA-Z0-9_]+$"},"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"null","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."}]},"items":{"oneOf":[{"type":"object","description":"Configuration for the array item node of this array property.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"self":{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."},"properties":{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1},"items":{"oneOf":[{"type":"null","description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Configuration for the array item node of this array property.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"self":{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."},"properties":{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1},"items":{"oneOf":[{"type":"null","description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"object","description":"Configuration for the array item node of this array property.","required":["self"],"properties":{"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."}]},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},"properties":{"oneOf":[{"type":"array","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}}]},"items":{"oneOf":[{"description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]}},"additionalProperties":false},{"type":"object","description":"Configuration for the array item node of this array property.","required":["properties"],"properties":{"properties":{"oneOf":[{"type":"array","items":{"oneOf":[{}]},"description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1}]},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."}]},"items":{"oneOf":[{"description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]}},"additionalProperties":false},{"type":"object","description":"Configuration for the array item node of this array property.","required":["items"],"properties":{"items":{"oneOf":[{"description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."}]},"properties":{"oneOf":[{"type":"array","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}}]}},"additionalProperties":false},{"type":"null","description":"Configuration for the array item node of this array property."}]}},"additionalProperties":false},{"type":"object","description":"Statistics configuration for a named property of an object node. The property may itself be primitive or non-primitive (recursive). A property must carry at least one configuration field — there is no no-op/inherited variant at the nested level. If a property is listed, it must specify what stats to compute. approx_count_distinct and count_distinct are mutually exclusive — the server rejects any request that includes both in the same enabled_stats array.","required":["path","items"],"properties":{"items":{"oneOf":[{"type":"object","description":"Configuration for the array item node of this array property.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"self":{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."},"properties":{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1},"items":{"oneOf":[{"type":"null","description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Configuration for the array item node of this array property.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"self":{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."},"properties":{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1},"items":{"oneOf":[{"type":"null","description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"object","description":"Configuration for the array item node of this array property.","required":["self"],"properties":{"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."}]},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},"properties":{"oneOf":[{"type":"array","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}}]},"items":{"oneOf":[{"description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]}},"additionalProperties":false},{"type":"object","description":"Configuration for the array item node of this array property.","required":["properties"],"properties":{"properties":{"oneOf":[{"type":"array","items":{"oneOf":[{}]},"description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1}]},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."}]},"items":{"oneOf":[{"description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]}},"additionalProperties":false},{"type":"object","description":"Configuration for the array item node of this array property.","required":["items"],"properties":{"items":{"oneOf":[{"description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."}]},"properties":{"oneOf":[{"type":"array","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}}]}},"additionalProperties":false},{"type":"null","description":"Configuration for the array item node of this array property."}]},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},"path":{"type":"string","description":"Name of the child property relative to the parent object node. Must be a valid identifier (alphanumeric and underscores, max 256 chars).","maxLength":256,"pattern":"^[a-zA-Z0-9_]+$"},"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"null","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."}]},"properties":{"oneOf":[{"type":"array","description":"Explicit configurations for named child properties of this object property. Only listed children receive stats — unlisted ones are skipped entirely.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}},{"type":"null","description":"Explicit configurations for named child properties of this object property. Only listed children receive stats — unlisted ones are skipped entirely.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}}]}},"additionalProperties":false}]}},{"type":"null","description":"Explicit configurations for named child properties of an object field. Only listed children receive stats — unlisted ones are skipped entirely.","minItems":1,"items":{"oneOf":[{"type":"object","description":"Statistics configuration for a named property of an object node. The property may itself be primitive or non-primitive (recursive). A property must carry at least one configuration field — there is no no-op/inherited variant at the nested level. If a property is listed, it must specify what stats to compute. approx_count_distinct and count_distinct are mutually exclusive — the server rejects any request that includes both in the same enabled_stats array.","required":["path","enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"self":{"type":"null","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."},"properties":{"type":"null","description":"Explicit configurations for named child properties of this object property. Only listed children receive stats — unlisted ones are skipped entirely.","minItems":1},"items":{"type":"null","description":"Configuration for the array item node of this array property."},"path":{"type":"string","description":"Name of the child property relative to the parent object node. Must be a valid identifier (alphanumeric and underscores, max 256 chars).","maxLength":256,"pattern":"^[a-zA-Z0-9_]+$"},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Statistics configuration for a named property of an object node. The property may itself be primitive or non-primitive (recursive). A property must carry at least one configuration field — there is no no-op/inherited variant at the nested level. If a property is listed, it must specify what stats to compute. approx_count_distinct and count_distinct are mutually exclusive — the server rejects any request that includes both in the same enabled_stats array.","required":["path","stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"self":{"type":"null","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."},"properties":{"type":"null","description":"Explicit configurations for named child properties of this object property. Only listed children receive stats — unlisted ones are skipped entirely.","minItems":1},"items":{"type":"null","description":"Configuration for the array item node of this array property."},"path":{"type":"string","description":"Name of the child property relative to the parent object node. Must be a valid identifier (alphanumeric and underscores, max 256 chars).","maxLength":256,"pattern":"^[a-zA-Z0-9_]+$"},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"object","description":"Statistics configuration for a named property of an object node. The property may itself be primitive or non-primitive (recursive). A property must carry at least one configuration field — there is no no-op/inherited variant at the nested level. If a property is listed, it must specify what stats to compute. approx_count_distinct and count_distinct are mutually exclusive — the server rejects any request that includes both in the same enabled_stats array.","required":["path","self"],"properties":{"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"null","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."}]},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},"path":{"type":"string","description":"Name of the child property relative to the parent object node. Must be a valid identifier (alphanumeric and underscores, max 256 chars).","maxLength":256,"pattern":"^[a-zA-Z0-9_]+$"},"properties":{"oneOf":[{"type":"array","description":"Explicit configurations for named child properties of this object property. Only listed children receive stats — unlisted ones are skipped entirely.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}},{"type":"null","description":"Explicit configurations for named child properties of this object property. Only listed children receive stats — unlisted ones are skipped entirely.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}}]},"items":{"oneOf":[{"type":"object","description":"Configuration for the array item node of this array property.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"self":{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."},"properties":{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1},"items":{"oneOf":[{"type":"null","description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Configuration for the array item node of this array property.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"self":{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."},"properties":{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1},"items":{"oneOf":[{"type":"null","description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"object","description":"Configuration for the array item node of this array property.","required":["self"],"properties":{"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."}]},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},"properties":{"oneOf":[{"type":"array","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}}]},"items":{"oneOf":[{"description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]}},"additionalProperties":false},{"type":"object","description":"Configuration for the array item node of this array property.","required":["properties"],"properties":{"properties":{"oneOf":[{"type":"array","items":{"oneOf":[{}]},"description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1}]},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."}]},"items":{"oneOf":[{"description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]}},"additionalProperties":false},{"type":"object","description":"Configuration for the array item node of this array property.","required":["items"],"properties":{"items":{"oneOf":[{"description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."}]},"properties":{"oneOf":[{"type":"array","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}}]}},"additionalProperties":false},{"type":"null","description":"Configuration for the array item node of this array property."}]}},"additionalProperties":false},{"type":"object","description":"Statistics configuration for a named property of an object node. The property may itself be primitive or non-primitive (recursive). A property must carry at least one configuration field — there is no no-op/inherited variant at the nested level. If a property is listed, it must specify what stats to compute. approx_count_distinct and count_distinct are mutually exclusive — the server rejects any request that includes both in the same enabled_stats array.","required":["path","properties"],"properties":{"properties":{"oneOf":[{"type":"array","items":{"oneOf":[{}]},"description":"Explicit configurations for named child properties of this object property. Only listed children receive stats — unlisted ones are skipped entirely.","minItems":1},{"type":"null","description":"Explicit configurations for named child properties of this object property. Only listed children receive stats — unlisted ones are skipped entirely.","minItems":1}]},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},"path":{"type":"string","description":"Name of the child property relative to the parent object node. Must be a valid identifier (alphanumeric and underscores, max 256 chars).","maxLength":256,"pattern":"^[a-zA-Z0-9_]+$"},"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"null","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."}]},"items":{"oneOf":[{"type":"object","description":"Configuration for the array item node of this array property.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"self":{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."},"properties":{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1},"items":{"oneOf":[{"type":"null","description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Configuration for the array item node of this array property.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"self":{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."},"properties":{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1},"items":{"oneOf":[{"type":"null","description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"object","description":"Configuration for the array item node of this array property.","required":["self"],"properties":{"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."}]},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},"properties":{"oneOf":[{"type":"array","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}}]},"items":{"oneOf":[{"description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]}},"additionalProperties":false},{"type":"object","description":"Configuration for the array item node of this array property.","required":["properties"],"properties":{"properties":{"oneOf":[{"type":"array","items":{"oneOf":[{}]},"description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1}]},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."}]},"items":{"oneOf":[{"description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]}},"additionalProperties":false},{"type":"object","description":"Configuration for the array item node of this array property.","required":["items"],"properties":{"items":{"oneOf":[{"description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."}]},"properties":{"oneOf":[{"type":"array","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}}]}},"additionalProperties":false},{"type":"null","description":"Configuration for the array item node of this array property."}]}},"additionalProperties":false},{"type":"object","description":"Statistics configuration for a named property of an object node. The property may itself be primitive or non-primitive (recursive). A property must carry at least one configuration field — there is no no-op/inherited variant at the nested level. If a property is listed, it must specify what stats to compute. approx_count_distinct and count_distinct are mutually exclusive — the server rejects any request that includes both in the same enabled_stats array.","required":["path","items"],"properties":{"items":{"oneOf":[{"type":"object","description":"Configuration for the array item node of this array property.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"self":{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."},"properties":{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1},"items":{"oneOf":[{"type":"null","description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Configuration for the array item node of this array property.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"self":{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."},"properties":{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1},"items":{"oneOf":[{"type":"null","description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"object","description":"Configuration for the array item node of this array property.","required":["self"],"properties":{"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."}]},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},"properties":{"oneOf":[{"type":"array","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}}]},"items":{"oneOf":[{"description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]}},"additionalProperties":false},{"type":"object","description":"Configuration for the array item node of this array property.","required":["properties"],"properties":{"properties":{"oneOf":[{"type":"array","items":{"oneOf":[{}]},"description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1}]},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."}]},"items":{"oneOf":[{"description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]}},"additionalProperties":false},{"type":"object","description":"Configuration for the array item node of this array property.","required":["items"],"properties":{"items":{"oneOf":[{"description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."}]},"properties":{"oneOf":[{"type":"array","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}}]}},"additionalProperties":false},{"type":"null","description":"Configuration for the array item node of this array property."}]},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},"path":{"type":"string","description":"Name of the child property relative to the parent object node. Must be a valid identifier (alphanumeric and underscores, max 256 chars).","maxLength":256,"pattern":"^[a-zA-Z0-9_]+$"},"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"null","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."}]},"properties":{"oneOf":[{"type":"array","description":"Explicit configurations for named child properties of this object property. Only listed children receive stats — unlisted ones are skipped entirely.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}},{"type":"null","description":"Explicit configurations for named child properties of this object property. Only listed children receive stats — unlisted ones are skipped entirely.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}}]}},"additionalProperties":false}]}}]},"items":{"oneOf":[{"type":"object","description":"Configuration for the array item node.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"self":{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."},"properties":{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1},"items":{"oneOf":[{"type":"null","description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Configuration for the array item node.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"self":{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."},"properties":{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1},"items":{"oneOf":[{"type":"null","description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"object","description":"Configuration for the array item node.","required":["self"],"properties":{"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."}]},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},"properties":{"oneOf":[{"type":"array","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}}]},"items":{"oneOf":[{"description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]}},"additionalProperties":false},{"type":"object","description":"Configuration for the array item node.","required":["properties"],"properties":{"properties":{"oneOf":[{"type":"array","items":{"oneOf":[{}]},"description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1}]},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."}]},"items":{"oneOf":[{"description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]}},"additionalProperties":false},{"type":"object","description":"Configuration for the array item node.","required":["items"],"properties":{"items":{"oneOf":[{"description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."}]},"properties":{"oneOf":[{"type":"array","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}}]}},"additionalProperties":false},{"type":"null","description":"Configuration for the array item node."}]},"attribute_name":{"type":"string","description":"The Rosetta Stone attribute name (e.g. 'hl7_gender', 'unique_identifier'). Must be a valid identifier (alphanumeric and underscores, max 256 chars).","maxLength":256,"pattern":"^[a-zA-Z0-9_]+$"}}},"uniqueKey":"rosetta_stone.oneOf.0.fields.oneOf.1","typeLabel":"null"}],"uniqueKey":"rosetta_stone.oneOf.0.fields","typeLabel":"object[] | null"}},"additionalProperties":false,"uniqueKey":"rosetta_stone.oneOf.0","typeLabel":"object"},{"type":"object","description":"Configuration for Rosetta Stone attributes. Use 'scope' to override defaults for all Rosetta Stone fields, or to disable the namespace entirely via enabled_stats: []. Use 'fields' for per-field overrides. Null when the config does not touch this namespace.","required":["fields"],"properties":{"fields":{"oneOf":[{"type":"array","items":{"type":"object","description":"Common stat configuration shared by dataset and Rosetta Stone field configs. Exactly one of three modes must be used (the server rejects invalid combinations):\n\n1. **Primitive field** — provide enabled_stats and/or stat_options at the top level.\n Must not include self, properties, or items.\n\n2. **Non-primitive field** — provide self, properties, and/or items for nested structure.\n Must not include enabled_stats or stat_options at this level;\n use self for node-level stat configuration instead.\n\n3. **No-op / inherit** — leave all stat fields null or absent. The field inherits its\n configuration from the namespace scope or global defaults.\n\n\nThis schema deliberately has no `oneOf` over the three modes. Mode 3 is all five slots null, which matches neither of the other two, so a closed union here would reject it.\nClosing this schema is left to the two that compose it. `additionalProperties: false` here would only see the properties below, so it would reject the `field_name` and `attribute_name` its siblings contribute; `DatasetFieldConfig` and `RosettaStoneFieldConfig` use `unevaluatedProperties: false`, which sees the whole composition.","required":["attribute_name"],"properties":{"attribute_name":{"type":"string","description":"The Rosetta Stone attribute name (e.g. 'hl7_gender', 'unique_identifier'). Must be a valid identifier (alphanumeric and underscores, max 256 chars).","maxLength":256,"pattern":"^[a-zA-Z0-9_]+$","isRequired":true,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].attribute_name","typeLabel":"string"},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].enabled_stats.oneOf.1","typeLabel":"null"}],"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].enabled_stats","typeLabel":"enum\u003cstring>[] | null"},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].stat_options.oneOf.0.histogram","typeLabel":"object"}},"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].stat_options.oneOf.1","typeLabel":"null"}],"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].stat_options","typeLabel":"object | null"},"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive field node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].self.oneOf.0.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].self.oneOf.0.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].self.oneOf.0.enabled_stats.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].self.oneOf.0.enabled_stats","typeLabel":"enum\u003cstring>[] | null"},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].self.oneOf.0.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].self.oneOf.0.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].self.oneOf.0.stat_options.oneOf.0.histogram","typeLabel":"object"}},"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].self.oneOf.0.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].self.oneOf.0.stat_options.oneOf.1","typeLabel":"null"}],"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].self.oneOf.0.stat_options","typeLabel":"object | null"}},"additionalProperties":false,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].self.oneOf.0","typeLabel":"object"},{"type":"object","description":"Statistics for the non-primitive field node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].self.oneOf.1.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].self.oneOf.1.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].self.oneOf.1.stat_options.oneOf.0.histogram","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].self.oneOf.1.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].self.oneOf.1.stat_options.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].self.oneOf.1.stat_options","typeLabel":"object | null"},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].self.oneOf.1.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].self.oneOf.1.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].self.oneOf.1.enabled_stats.oneOf.1","typeLabel":"null"}],"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].self.oneOf.1.enabled_stats","typeLabel":"enum\u003cstring>[] | null"}},"additionalProperties":false,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].self.oneOf.1","typeLabel":"object"},{"type":"null","description":"Statistics for the non-primitive field node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].self.oneOf.2","typeLabel":"null"}],"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].self","typeLabel":"object · object · null"},"properties":{"oneOf":[{"type":"array","description":"Explicit configurations for named child properties of an object field. Only listed children receive stats — unlisted ones are skipped entirely.","minItems":1,"items":{"oneOf":[{"type":"object","description":"Statistics configuration for a named property of an object node. The property may itself be primitive or non-primitive (recursive). A property must carry at least one configuration field — there is no no-op/inherited variant at the nested level. If a property is listed, it must specify what stats to compute. approx_count_distinct and count_distinct are mutually exclusive — the server rejects any request that includes both in the same enabled_stats array.","required":["path","enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.0.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.0.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.0.enabled_stats.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.0.enabled_stats","typeLabel":"enum\u003cstring>[] | null"},"path":{"type":"string","description":"Name of the child property relative to the parent object node. Must be a valid identifier (alphanumeric and underscores, max 256 chars).","maxLength":256,"pattern":"^[a-zA-Z0-9_]+$","isRequired":true,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.0.path","typeLabel":"string"},"self":{"type":"null","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.0.self","typeLabel":"null"},"properties":{"type":"null","description":"Explicit configurations for named child properties of this object property. Only listed children receive stats — unlisted ones are skipped entirely.","minItems":1,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.0.properties","typeLabel":"null"},"items":{"type":"null","description":"Configuration for the array item node of this array property.","uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.0.\\items","typeLabel":"null"},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.0.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.0.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.0.stat_options.oneOf.0.histogram","typeLabel":"object"}},"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.0.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.0.stat_options.oneOf.1","typeLabel":"null"}],"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.0.stat_options","typeLabel":"object | null"}},"additionalProperties":false,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.0","typeLabel":"object"},{"type":"object","description":"Statistics configuration for a named property of an object node. The property may itself be primitive or non-primitive (recursive). A property must carry at least one configuration field — there is no no-op/inherited variant at the nested level. If a property is listed, it must specify what stats to compute. approx_count_distinct and count_distinct are mutually exclusive — the server rejects any request that includes both in the same enabled_stats array.","required":["path","stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.1.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.1.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.1.stat_options.oneOf.0.histogram","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.1.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.1.stat_options.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.1.stat_options","typeLabel":"object | null"},"path":{"type":"string","description":"Name of the child property relative to the parent object node. Must be a valid identifier (alphanumeric and underscores, max 256 chars).","maxLength":256,"pattern":"^[a-zA-Z0-9_]+$","isRequired":true,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.1.path","typeLabel":"string"},"self":{"type":"null","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.1.self","typeLabel":"null"},"properties":{"type":"null","description":"Explicit configurations for named child properties of this object property. Only listed children receive stats — unlisted ones are skipped entirely.","minItems":1,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.1.properties","typeLabel":"null"},"items":{"type":"null","description":"Configuration for the array item node of this array property.","uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.1.\\items","typeLabel":"null"},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.1.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.1.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.1.enabled_stats.oneOf.1","typeLabel":"null"}],"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.1.enabled_stats","typeLabel":"enum\u003cstring>[] | null"}},"additionalProperties":false,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.1","typeLabel":"object"},{"type":"object","description":"Statistics configuration for a named property of an object node. The property may itself be primitive or non-primitive (recursive). A property must carry at least one configuration field — there is no no-op/inherited variant at the nested level. If a property is listed, it must specify what stats to compute. approx_count_distinct and count_distinct are mutually exclusive — the server rejects any request that includes both in the same enabled_stats array.","required":["path","self"],"properties":{"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.self.oneOf.0.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.self.oneOf.0.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.self.oneOf.0.enabled_stats.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.self.oneOf.0.enabled_stats","typeLabel":"enum\u003cstring>[] | null"},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.self.oneOf.0.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.self.oneOf.0.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.self.oneOf.0.stat_options.oneOf.0.histogram","typeLabel":"object"}},"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.self.oneOf.0.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.self.oneOf.0.stat_options.oneOf.1","typeLabel":"null"}],"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.self.oneOf.0.stat_options","typeLabel":"object | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.self.oneOf.0","typeLabel":"object"},{"type":"object","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.self.oneOf.1.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.self.oneOf.1.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.self.oneOf.1.stat_options.oneOf.0.histogram","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.self.oneOf.1.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.self.oneOf.1.stat_options.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.self.oneOf.1.stat_options","typeLabel":"object | null"},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.self.oneOf.1.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.self.oneOf.1.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.self.oneOf.1.enabled_stats.oneOf.1","typeLabel":"null"}],"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.self.oneOf.1.enabled_stats","typeLabel":"enum\u003cstring>[] | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.self.oneOf.1","typeLabel":"object"},{"type":"null","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","isRequired":true,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.self.oneOf.2","typeLabel":"null"}],"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.self","typeLabel":"object · object · null"},"path":{"type":"string","description":"Name of the child property relative to the parent object node. Must be a valid identifier (alphanumeric and underscores, max 256 chars).","maxLength":256,"pattern":"^[a-zA-Z0-9_]+$","isRequired":true,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.path","typeLabel":"string"},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.enabled_stats","typeLabel":"null"},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.stat_options","typeLabel":"null"},"properties":{"oneOf":[{"type":"array","description":"Explicit configurations for named child properties of this object property. Only listed children receive stats — unlisted ones are skipped entirely.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"},"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.properties.oneOf.0","typeLabel":"array"},{"type":"null","description":"Explicit configurations for named child properties of this object property. Only listed children receive stats — unlisted ones are skipped entirely.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"},"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.properties.oneOf.1","typeLabel":"null"}],"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.properties","typeLabel":"array | null"},"items":{"oneOf":[{"type":"object","description":"Configuration for the array item node of this array property.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.0.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.0.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.0.enabled_stats.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.0.enabled_stats","typeLabel":"enum\u003cstring>[] | null"},"self":{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.0.self","typeLabel":"null"},"properties":{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.0.properties","typeLabel":"null"},"items":{"oneOf":[{"type":"null","description":"Configuration for the array item node.","uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.0.\\items.oneOf.0","typeLabel":"null"},{"type":"null","description":"Configuration for the array item node.","uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.0.\\items.oneOf.1","typeLabel":"null"}],"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.0.\\items","typeLabel":"null"},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.0.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.0.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.0.stat_options.oneOf.0.histogram","typeLabel":"object"}},"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.0.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.0.stat_options.oneOf.1","typeLabel":"null"}],"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.0.stat_options","typeLabel":"object | null"}},"additionalProperties":false,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.0","typeLabel":"object"},{"type":"object","description":"Configuration for the array item node of this array property.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.1.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.1.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.1.stat_options.oneOf.0.histogram","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.1.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.1.stat_options.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.1.stat_options","typeLabel":"object | null"},"self":{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.1.self","typeLabel":"null"},"properties":{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.1.properties","typeLabel":"null"},"items":{"oneOf":[{"type":"null","description":"Configuration for the array item node.","uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.1.\\items.oneOf.0","typeLabel":"null"},{"type":"null","description":"Configuration for the array item node.","uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.1.\\items.oneOf.1","typeLabel":"null"}],"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.1.\\items","typeLabel":"null"},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.1.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.1.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.1.enabled_stats.oneOf.1","typeLabel":"null"}],"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.1.enabled_stats","typeLabel":"enum\u003cstring>[] | null"}},"additionalProperties":false,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.1","typeLabel":"object"},{"type":"object","description":"Configuration for the array item node of this array property.","required":["self"],"properties":{"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.self.oneOf.0.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.self.oneOf.0.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.self.oneOf.0.enabled_stats.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.self.oneOf.0.enabled_stats","typeLabel":"enum\u003cstring>[] | null"},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.self.oneOf.0.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.self.oneOf.0.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.self.oneOf.0.stat_options.oneOf.0.histogram","typeLabel":"object"}},"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.self.oneOf.0.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.self.oneOf.0.stat_options.oneOf.1","typeLabel":"null"}],"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.self.oneOf.0.stat_options","typeLabel":"object | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.self.oneOf.0","typeLabel":"object"},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.self.oneOf.1.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.self.oneOf.1.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.self.oneOf.1.stat_options.oneOf.0.histogram","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.self.oneOf.1.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.self.oneOf.1.stat_options.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.self.oneOf.1.stat_options","typeLabel":"object | null"},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.self.oneOf.1.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.self.oneOf.1.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.self.oneOf.1.enabled_stats.oneOf.1","typeLabel":"null"}],"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.self.oneOf.1.enabled_stats","typeLabel":"enum\u003cstring>[] | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.self.oneOf.1","typeLabel":"object"},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","isRequired":true,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.self.oneOf.2","typeLabel":"null"}],"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.self","typeLabel":"object · object · null"},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.enabled_stats","typeLabel":"null"},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.stat_options","typeLabel":"null"},"properties":{"oneOf":[{"type":"array","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"},"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.properties.oneOf.0","typeLabel":"array"},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"},"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.properties.oneOf.1","typeLabel":"null"}],"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.properties","typeLabel":"array | null"},"items":{"oneOf":[{"description":"Configuration for the array item node.","uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.\\items.oneOf.0","typeLabel":"any"},{"type":"null","description":"Configuration for the array item node.","uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.\\items.oneOf.1","typeLabel":"null"}],"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.\\items","typeLabel":"any | null"}},"additionalProperties":false,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2","typeLabel":"object"},{"type":"object","description":"Configuration for the array item node of this array property.","required":["properties"],"properties":{"properties":{"oneOf":[{"type":"array","items":{"oneOf":[{}],"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.properties.oneOf.0.items.[INDEX]","typeLabel":"any"},"description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.properties.oneOf.0","typeLabel":"any[]"},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.properties.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.properties","typeLabel":"any[] | null"},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.enabled_stats","typeLabel":"null"},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.stat_options","typeLabel":"null"},"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.self.oneOf.0.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.self.oneOf.0.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.self.oneOf.0.enabled_stats.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.self.oneOf.0.enabled_stats","typeLabel":"enum\u003cstring>[] | null"},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.self.oneOf.0.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.self.oneOf.0.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.self.oneOf.0.stat_options.oneOf.0.histogram","typeLabel":"object"}},"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.self.oneOf.0.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.self.oneOf.0.stat_options.oneOf.1","typeLabel":"null"}],"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.self.oneOf.0.stat_options","typeLabel":"object | null"}},"additionalProperties":false,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.self.oneOf.0","typeLabel":"object"},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.self.oneOf.1.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.self.oneOf.1.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.self.oneOf.1.stat_options.oneOf.0.histogram","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.self.oneOf.1.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.self.oneOf.1.stat_options.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.self.oneOf.1.stat_options","typeLabel":"object | null"},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.self.oneOf.1.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.self.oneOf.1.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.self.oneOf.1.enabled_stats.oneOf.1","typeLabel":"null"}],"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.self.oneOf.1.enabled_stats","typeLabel":"enum\u003cstring>[] | null"}},"additionalProperties":false,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.self.oneOf.1","typeLabel":"object"},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.self.oneOf.2","typeLabel":"null"}],"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.self","typeLabel":"object · object · null"},"items":{"oneOf":[{"description":"Configuration for the array item node.","uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.\\items.oneOf.0","typeLabel":"any"},{"type":"null","description":"Configuration for the array item node.","uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.\\items.oneOf.1","typeLabel":"null"}],"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.\\items","typeLabel":"any | null"}},"additionalProperties":false,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3","typeLabel":"object"},{"type":"object","description":"Configuration for the array item node of this array property.","required":["items"],"properties":{"items":{"oneOf":[{"description":"Configuration for the array item node.","isRequired":true,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.\\items.oneOf.0","typeLabel":"any"},{"type":"null","description":"Configuration for the array item node.","isRequired":true,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.\\items.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.\\items","typeLabel":"any | null"},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.enabled_stats","typeLabel":"null"},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.stat_options","typeLabel":"null"},"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.self.oneOf.0.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.self.oneOf.0.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.self.oneOf.0.enabled_stats.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.self.oneOf.0.enabled_stats","typeLabel":"enum\u003cstring>[] | null"},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.self.oneOf.0.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.self.oneOf.0.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.self.oneOf.0.stat_options.oneOf.0.histogram","typeLabel":"object"}},"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.self.oneOf.0.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.self.oneOf.0.stat_options.oneOf.1","typeLabel":"null"}],"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.self.oneOf.0.stat_options","typeLabel":"object | null"}},"additionalProperties":false,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.self.oneOf.0","typeLabel":"object"},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.self.oneOf.1.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.self.oneOf.1.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.self.oneOf.1.stat_options.oneOf.0.histogram","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.self.oneOf.1.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.self.oneOf.1.stat_options.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.self.oneOf.1.stat_options","typeLabel":"object | null"},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.self.oneOf.1.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.self.oneOf.1.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.self.oneOf.1.enabled_stats.oneOf.1","typeLabel":"null"}],"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.self.oneOf.1.enabled_stats","typeLabel":"enum\u003cstring>[] | null"}},"additionalProperties":false,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.self.oneOf.1","typeLabel":"object"},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.self.oneOf.2","typeLabel":"null"}],"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.self","typeLabel":"object · object · null"},"properties":{"oneOf":[{"type":"array","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"},"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.properties.oneOf.0","typeLabel":"array"},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"},"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.properties.oneOf.1","typeLabel":"null"}],"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.properties","typeLabel":"array | null"}},"additionalProperties":false,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4","typeLabel":"object"},{"type":"null","description":"Configuration for the array item node of this array property.","uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.5","typeLabel":"null"}],"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items","typeLabel":"object · object · object · object · object · null"}},"additionalProperties":false,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2","typeLabel":"object"},{"type":"object","description":"Statistics configuration for a named property of an object node. The property may itself be primitive or non-primitive (recursive). A property must carry at least one configuration field — there is no no-op/inherited variant at the nested level. If a property is listed, it must specify what stats to compute. approx_count_distinct and count_distinct are mutually exclusive — the server rejects any request that includes both in the same enabled_stats array.","required":["path","properties"],"properties":{"properties":{"oneOf":[{"type":"array","items":{"oneOf":[{}],"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.properties.oneOf.0.items.[INDEX]","typeLabel":"any"},"description":"Explicit configurations for named child properties of this object property. Only listed children receive stats — unlisted ones are skipped entirely.","minItems":1,"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.properties.oneOf.0","typeLabel":"any[]"},{"type":"null","description":"Explicit configurations for named child properties of this object property. Only listed children receive stats — unlisted ones are skipped entirely.","minItems":1,"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.properties.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.properties","typeLabel":"any[] | null"},"path":{"type":"string","description":"Name of the child property relative to the parent object node. Must be a valid identifier (alphanumeric and underscores, max 256 chars).","maxLength":256,"pattern":"^[a-zA-Z0-9_]+$","isRequired":true,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.path","typeLabel":"string"},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.enabled_stats","typeLabel":"null"},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.stat_options","typeLabel":"null"},"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.self.oneOf.0.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.self.oneOf.0.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.self.oneOf.0.enabled_stats.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.self.oneOf.0.enabled_stats","typeLabel":"enum\u003cstring>[] | null"},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.self.oneOf.0.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.self.oneOf.0.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.self.oneOf.0.stat_options.oneOf.0.histogram","typeLabel":"object"}},"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.self.oneOf.0.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.self.oneOf.0.stat_options.oneOf.1","typeLabel":"null"}],"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.self.oneOf.0.stat_options","typeLabel":"object | null"}},"additionalProperties":false,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.self.oneOf.0","typeLabel":"object"},{"type":"object","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.self.oneOf.1.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.self.oneOf.1.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.self.oneOf.1.stat_options.oneOf.0.histogram","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.self.oneOf.1.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.self.oneOf.1.stat_options.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.self.oneOf.1.stat_options","typeLabel":"object | null"},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.self.oneOf.1.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.self.oneOf.1.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.self.oneOf.1.enabled_stats.oneOf.1","typeLabel":"null"}],"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.self.oneOf.1.enabled_stats","typeLabel":"enum\u003cstring>[] | null"}},"additionalProperties":false,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.self.oneOf.1","typeLabel":"object"},{"type":"null","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.self.oneOf.2","typeLabel":"null"}],"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.self","typeLabel":"object · object · null"},"items":{"oneOf":[{"type":"object","description":"Configuration for the array item node of this array property.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.0.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.0.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.0.enabled_stats.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.0.enabled_stats","typeLabel":"enum\u003cstring>[] | null"},"self":{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.0.self","typeLabel":"null"},"properties":{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.0.properties","typeLabel":"null"},"items":{"oneOf":[{"type":"null","description":"Configuration for the array item node.","uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.0.\\items.oneOf.0","typeLabel":"null"},{"type":"null","description":"Configuration for the array item node.","uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.0.\\items.oneOf.1","typeLabel":"null"}],"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.0.\\items","typeLabel":"null"},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.0.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.0.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.0.stat_options.oneOf.0.histogram","typeLabel":"object"}},"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.0.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.0.stat_options.oneOf.1","typeLabel":"null"}],"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.0.stat_options","typeLabel":"object | null"}},"additionalProperties":false,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.0","typeLabel":"object"},{"type":"object","description":"Configuration for the array item node of this array property.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.1.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.1.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.1.stat_options.oneOf.0.histogram","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.1.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.1.stat_options.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.1.stat_options","typeLabel":"object | null"},"self":{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.1.self","typeLabel":"null"},"properties":{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.1.properties","typeLabel":"null"},"items":{"oneOf":[{"type":"null","description":"Configuration for the array item node.","uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.1.\\items.oneOf.0","typeLabel":"null"},{"type":"null","description":"Configuration for the array item node.","uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.1.\\items.oneOf.1","typeLabel":"null"}],"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.1.\\items","typeLabel":"null"},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.1.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.1.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.1.enabled_stats.oneOf.1","typeLabel":"null"}],"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.1.enabled_stats","typeLabel":"enum\u003cstring>[] | null"}},"additionalProperties":false,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.1","typeLabel":"object"},{"type":"object","description":"Configuration for the array item node of this array property.","required":["self"],"properties":{"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.self.oneOf.0.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.self.oneOf.0.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.self.oneOf.0.enabled_stats.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.self.oneOf.0.enabled_stats","typeLabel":"enum\u003cstring>[] | null"},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.self.oneOf.0.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.self.oneOf.0.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.self.oneOf.0.stat_options.oneOf.0.histogram","typeLabel":"object"}},"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.self.oneOf.0.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.self.oneOf.0.stat_options.oneOf.1","typeLabel":"null"}],"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.self.oneOf.0.stat_options","typeLabel":"object | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.self.oneOf.0","typeLabel":"object"},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.self.oneOf.1.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.self.oneOf.1.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.self.oneOf.1.stat_options.oneOf.0.histogram","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.self.oneOf.1.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.self.oneOf.1.stat_options.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.self.oneOf.1.stat_options","typeLabel":"object | null"},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.self.oneOf.1.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.self.oneOf.1.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.self.oneOf.1.enabled_stats.oneOf.1","typeLabel":"null"}],"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.self.oneOf.1.enabled_stats","typeLabel":"enum\u003cstring>[] | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.self.oneOf.1","typeLabel":"object"},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","isRequired":true,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.self.oneOf.2","typeLabel":"null"}],"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.self","typeLabel":"object · object · null"},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.enabled_stats","typeLabel":"null"},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.stat_options","typeLabel":"null"},"properties":{"oneOf":[{"type":"array","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"},"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.properties.oneOf.0","typeLabel":"array"},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"},"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.properties.oneOf.1","typeLabel":"null"}],"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.properties","typeLabel":"array | null"},"items":{"oneOf":[{"description":"Configuration for the array item node.","uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.\\items.oneOf.0","typeLabel":"any"},{"type":"null","description":"Configuration for the array item node.","uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.\\items.oneOf.1","typeLabel":"null"}],"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.\\items","typeLabel":"any | null"}},"additionalProperties":false,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2","typeLabel":"object"},{"type":"object","description":"Configuration for the array item node of this array property.","required":["properties"],"properties":{"properties":{"oneOf":[{"type":"array","items":{"oneOf":[{}],"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.properties.oneOf.0.items.[INDEX]","typeLabel":"any"},"description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.properties.oneOf.0","typeLabel":"any[]"},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.properties.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.properties","typeLabel":"any[] | null"},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.enabled_stats","typeLabel":"null"},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.stat_options","typeLabel":"null"},"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.self.oneOf.0.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.self.oneOf.0.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.self.oneOf.0.enabled_stats.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.self.oneOf.0.enabled_stats","typeLabel":"enum\u003cstring>[] | null"},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.self.oneOf.0.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.self.oneOf.0.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.self.oneOf.0.stat_options.oneOf.0.histogram","typeLabel":"object"}},"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.self.oneOf.0.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.self.oneOf.0.stat_options.oneOf.1","typeLabel":"null"}],"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.self.oneOf.0.stat_options","typeLabel":"object | null"}},"additionalProperties":false,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.self.oneOf.0","typeLabel":"object"},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.self.oneOf.1.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.self.oneOf.1.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.self.oneOf.1.stat_options.oneOf.0.histogram","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.self.oneOf.1.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.self.oneOf.1.stat_options.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.self.oneOf.1.stat_options","typeLabel":"object | null"},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.self.oneOf.1.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.self.oneOf.1.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.self.oneOf.1.enabled_stats.oneOf.1","typeLabel":"null"}],"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.self.oneOf.1.enabled_stats","typeLabel":"enum\u003cstring>[] | null"}},"additionalProperties":false,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.self.oneOf.1","typeLabel":"object"},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.self.oneOf.2","typeLabel":"null"}],"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.self","typeLabel":"object · object · null"},"items":{"oneOf":[{"description":"Configuration for the array item node.","uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.\\items.oneOf.0","typeLabel":"any"},{"type":"null","description":"Configuration for the array item node.","uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.\\items.oneOf.1","typeLabel":"null"}],"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.\\items","typeLabel":"any | null"}},"additionalProperties":false,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3","typeLabel":"object"},{"type":"object","description":"Configuration for the array item node of this array property.","required":["items"],"properties":{"items":{"oneOf":[{"description":"Configuration for the array item node.","isRequired":true,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.\\items.oneOf.0","typeLabel":"any"},{"type":"null","description":"Configuration for the array item node.","isRequired":true,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.\\items.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.\\items","typeLabel":"any | null"},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.enabled_stats","typeLabel":"null"},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.stat_options","typeLabel":"null"},"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.self.oneOf.0.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.self.oneOf.0.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.self.oneOf.0.enabled_stats.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.self.oneOf.0.enabled_stats","typeLabel":"enum\u003cstring>[] | null"},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.self.oneOf.0.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.self.oneOf.0.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.self.oneOf.0.stat_options.oneOf.0.histogram","typeLabel":"object"}},"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.self.oneOf.0.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.self.oneOf.0.stat_options.oneOf.1","typeLabel":"null"}],"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.self.oneOf.0.stat_options","typeLabel":"object | null"}},"additionalProperties":false,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.self.oneOf.0","typeLabel":"object"},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.self.oneOf.1.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.self.oneOf.1.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.self.oneOf.1.stat_options.oneOf.0.histogram","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.self.oneOf.1.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.self.oneOf.1.stat_options.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.self.oneOf.1.stat_options","typeLabel":"object | null"},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.self.oneOf.1.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.self.oneOf.1.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.self.oneOf.1.enabled_stats.oneOf.1","typeLabel":"null"}],"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.self.oneOf.1.enabled_stats","typeLabel":"enum\u003cstring>[] | null"}},"additionalProperties":false,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.self.oneOf.1","typeLabel":"object"},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.self.oneOf.2","typeLabel":"null"}],"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.self","typeLabel":"object · object · null"},"properties":{"oneOf":[{"type":"array","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"},"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.properties.oneOf.0","typeLabel":"array"},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"},"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.properties.oneOf.1","typeLabel":"null"}],"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.properties","typeLabel":"array | null"}},"additionalProperties":false,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4","typeLabel":"object"},{"type":"null","description":"Configuration for the array item node of this array property.","uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.5","typeLabel":"null"}],"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items","typeLabel":"object · object · object · object · object · null"}},"additionalProperties":false,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3","typeLabel":"object"},{"type":"object","description":"Statistics configuration for a named property of an object node. The property may itself be primitive or non-primitive (recursive). A property must carry at least one configuration field — there is no no-op/inherited variant at the nested level. If a property is listed, it must specify what stats to compute. approx_count_distinct and count_distinct are mutually exclusive — the server rejects any request that includes both in the same enabled_stats array.","required":["path","items"],"properties":{"items":{"oneOf":[{"type":"object","description":"Configuration for the array item node of this array property.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.0.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.0.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.0.enabled_stats.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.0.enabled_stats","typeLabel":"enum\u003cstring>[] | null"},"self":{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.0.self","typeLabel":"null"},"properties":{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.0.properties","typeLabel":"null"},"items":{"oneOf":[{"type":"null","description":"Configuration for the array item node.","uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.0.\\items.oneOf.0","typeLabel":"null"},{"type":"null","description":"Configuration for the array item node.","uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.0.\\items.oneOf.1","typeLabel":"null"}],"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.0.\\items","typeLabel":"null"},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.0.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.0.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.0.stat_options.oneOf.0.histogram","typeLabel":"object"}},"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.0.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.0.stat_options.oneOf.1","typeLabel":"null"}],"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.0.stat_options","typeLabel":"object | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.0","typeLabel":"object"},{"type":"object","description":"Configuration for the array item node of this array property.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.1.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.1.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.1.stat_options.oneOf.0.histogram","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.1.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.1.stat_options.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.1.stat_options","typeLabel":"object | null"},"self":{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.1.self","typeLabel":"null"},"properties":{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.1.properties","typeLabel":"null"},"items":{"oneOf":[{"type":"null","description":"Configuration for the array item node.","uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.1.\\items.oneOf.0","typeLabel":"null"},{"type":"null","description":"Configuration for the array item node.","uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.1.\\items.oneOf.1","typeLabel":"null"}],"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.1.\\items","typeLabel":"null"},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.1.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.1.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.1.enabled_stats.oneOf.1","typeLabel":"null"}],"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.1.enabled_stats","typeLabel":"enum\u003cstring>[] | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.1","typeLabel":"object"},{"type":"object","description":"Configuration for the array item node of this array property.","required":["self"],"properties":{"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.self.oneOf.0.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.self.oneOf.0.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.self.oneOf.0.enabled_stats.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.self.oneOf.0.enabled_stats","typeLabel":"enum\u003cstring>[] | null"},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.self.oneOf.0.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.self.oneOf.0.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.self.oneOf.0.stat_options.oneOf.0.histogram","typeLabel":"object"}},"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.self.oneOf.0.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.self.oneOf.0.stat_options.oneOf.1","typeLabel":"null"}],"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.self.oneOf.0.stat_options","typeLabel":"object | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.self.oneOf.0","typeLabel":"object"},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.self.oneOf.1.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.self.oneOf.1.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.self.oneOf.1.stat_options.oneOf.0.histogram","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.self.oneOf.1.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.self.oneOf.1.stat_options.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.self.oneOf.1.stat_options","typeLabel":"object | null"},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.self.oneOf.1.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.self.oneOf.1.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.self.oneOf.1.enabled_stats.oneOf.1","typeLabel":"null"}],"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.self.oneOf.1.enabled_stats","typeLabel":"enum\u003cstring>[] | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.self.oneOf.1","typeLabel":"object"},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","isRequired":true,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.self.oneOf.2","typeLabel":"null"}],"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.self","typeLabel":"object · object · null"},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.enabled_stats","typeLabel":"null"},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.stat_options","typeLabel":"null"},"properties":{"oneOf":[{"type":"array","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"},"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.properties.oneOf.0","typeLabel":"array"},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"},"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.properties.oneOf.1","typeLabel":"null"}],"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.properties","typeLabel":"array | null"},"items":{"oneOf":[{"description":"Configuration for the array item node.","uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.\\items.oneOf.0","typeLabel":"any"},{"type":"null","description":"Configuration for the array item node.","uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.\\items.oneOf.1","typeLabel":"null"}],"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.\\items","typeLabel":"any | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2","typeLabel":"object"},{"type":"object","description":"Configuration for the array item node of this array property.","required":["properties"],"properties":{"properties":{"oneOf":[{"type":"array","items":{"oneOf":[{}],"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.properties.oneOf.0.items.[INDEX]","typeLabel":"any"},"description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.properties.oneOf.0","typeLabel":"any[]"},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.properties.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.properties","typeLabel":"any[] | null"},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.enabled_stats","typeLabel":"null"},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.stat_options","typeLabel":"null"},"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.self.oneOf.0.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.self.oneOf.0.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.self.oneOf.0.enabled_stats.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.self.oneOf.0.enabled_stats","typeLabel":"enum\u003cstring>[] | null"},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.self.oneOf.0.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.self.oneOf.0.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.self.oneOf.0.stat_options.oneOf.0.histogram","typeLabel":"object"}},"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.self.oneOf.0.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.self.oneOf.0.stat_options.oneOf.1","typeLabel":"null"}],"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.self.oneOf.0.stat_options","typeLabel":"object | null"}},"additionalProperties":false,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.self.oneOf.0","typeLabel":"object"},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.self.oneOf.1.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.self.oneOf.1.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.self.oneOf.1.stat_options.oneOf.0.histogram","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.self.oneOf.1.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.self.oneOf.1.stat_options.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.self.oneOf.1.stat_options","typeLabel":"object | null"},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.self.oneOf.1.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.self.oneOf.1.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.self.oneOf.1.enabled_stats.oneOf.1","typeLabel":"null"}],"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.self.oneOf.1.enabled_stats","typeLabel":"enum\u003cstring>[] | null"}},"additionalProperties":false,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.self.oneOf.1","typeLabel":"object"},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.self.oneOf.2","typeLabel":"null"}],"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.self","typeLabel":"object · object · null"},"items":{"oneOf":[{"description":"Configuration for the array item node.","uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.\\items.oneOf.0","typeLabel":"any"},{"type":"null","description":"Configuration for the array item node.","uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.\\items.oneOf.1","typeLabel":"null"}],"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.\\items","typeLabel":"any | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3","typeLabel":"object"},{"type":"object","description":"Configuration for the array item node of this array property.","required":["items"],"properties":{"items":{"oneOf":[{"description":"Configuration for the array item node.","isRequired":true,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.\\items.oneOf.0","typeLabel":"any"},{"type":"null","description":"Configuration for the array item node.","isRequired":true,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.\\items.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.\\items","typeLabel":"any | null"},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.enabled_stats","typeLabel":"null"},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.stat_options","typeLabel":"null"},"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.self.oneOf.0.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.self.oneOf.0.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.self.oneOf.0.enabled_stats.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.self.oneOf.0.enabled_stats","typeLabel":"enum\u003cstring>[] | null"},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.self.oneOf.0.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.self.oneOf.0.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.self.oneOf.0.stat_options.oneOf.0.histogram","typeLabel":"object"}},"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.self.oneOf.0.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.self.oneOf.0.stat_options.oneOf.1","typeLabel":"null"}],"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.self.oneOf.0.stat_options","typeLabel":"object | null"}},"additionalProperties":false,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.self.oneOf.0","typeLabel":"object"},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.self.oneOf.1.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.self.oneOf.1.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.self.oneOf.1.stat_options.oneOf.0.histogram","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.self.oneOf.1.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.self.oneOf.1.stat_options.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.self.oneOf.1.stat_options","typeLabel":"object | null"},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.self.oneOf.1.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.self.oneOf.1.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.self.oneOf.1.enabled_stats.oneOf.1","typeLabel":"null"}],"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.self.oneOf.1.enabled_stats","typeLabel":"enum\u003cstring>[] | null"}},"additionalProperties":false,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.self.oneOf.1","typeLabel":"object"},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.self.oneOf.2","typeLabel":"null"}],"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.self","typeLabel":"object · object · null"},"properties":{"oneOf":[{"type":"array","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"},"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.properties.oneOf.0","typeLabel":"array"},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"},"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.properties.oneOf.1","typeLabel":"null"}],"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.properties","typeLabel":"array | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4","typeLabel":"object"},{"type":"null","description":"Configuration for the array item node of this array property.","isRequired":true,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.5","typeLabel":"null"}],"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items","typeLabel":"object · object · object · object · object · null"},"path":{"type":"string","description":"Name of the child property relative to the parent object node. Must be a valid identifier (alphanumeric and underscores, max 256 chars).","maxLength":256,"pattern":"^[a-zA-Z0-9_]+$","isRequired":true,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.path","typeLabel":"string"},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.enabled_stats","typeLabel":"null"},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.stat_options","typeLabel":"null"},"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.self.oneOf.0.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.self.oneOf.0.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.self.oneOf.0.enabled_stats.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.self.oneOf.0.enabled_stats","typeLabel":"enum\u003cstring>[] | null"},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.self.oneOf.0.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.self.oneOf.0.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.self.oneOf.0.stat_options.oneOf.0.histogram","typeLabel":"object"}},"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.self.oneOf.0.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.self.oneOf.0.stat_options.oneOf.1","typeLabel":"null"}],"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.self.oneOf.0.stat_options","typeLabel":"object | null"}},"additionalProperties":false,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.self.oneOf.0","typeLabel":"object"},{"type":"object","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.self.oneOf.1.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.self.oneOf.1.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.self.oneOf.1.stat_options.oneOf.0.histogram","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.self.oneOf.1.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.self.oneOf.1.stat_options.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.self.oneOf.1.stat_options","typeLabel":"object | null"},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.self.oneOf.1.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.self.oneOf.1.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.self.oneOf.1.enabled_stats.oneOf.1","typeLabel":"null"}],"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.self.oneOf.1.enabled_stats","typeLabel":"enum\u003cstring>[] | null"}},"additionalProperties":false,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.self.oneOf.1","typeLabel":"object"},{"type":"null","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.self.oneOf.2","typeLabel":"null"}],"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.self","typeLabel":"object · object · null"},"properties":{"oneOf":[{"type":"array","description":"Explicit configurations for named child properties of this object property. Only listed children receive stats — unlisted ones are skipped entirely.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"},"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.properties.oneOf.0","typeLabel":"array"},{"type":"null","description":"Explicit configurations for named child properties of this object property. Only listed children receive stats — unlisted ones are skipped entirely.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"},"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.properties.oneOf.1","typeLabel":"null"}],"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.properties","typeLabel":"array | null"}},"additionalProperties":false,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4","typeLabel":"object"}],"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX]","typeLabel":"object"},"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0","typeLabel":"object[]"},{"type":"null","description":"Explicit configurations for named child properties of an object field. Only listed children receive stats — unlisted ones are skipped entirely.","minItems":1,"items":{"oneOf":[{"type":"object","description":"Statistics configuration for a named property of an object node. The property may itself be primitive or non-primitive (recursive). A property must carry at least one configuration field — there is no no-op/inherited variant at the nested level. If a property is listed, it must specify what stats to compute. approx_count_distinct and count_distinct are mutually exclusive — the server rejects any request that includes both in the same enabled_stats array.","required":["path","enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"self":{"type":"null","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."},"properties":{"type":"null","description":"Explicit configurations for named child properties of this object property. Only listed children receive stats — unlisted ones are skipped entirely.","minItems":1},"items":{"type":"null","description":"Configuration for the array item node of this array property."},"path":{"type":"string","description":"Name of the child property relative to the parent object node. Must be a valid identifier (alphanumeric and underscores, max 256 chars).","maxLength":256,"pattern":"^[a-zA-Z0-9_]+$"},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Statistics configuration for a named property of an object node. The property may itself be primitive or non-primitive (recursive). A property must carry at least one configuration field — there is no no-op/inherited variant at the nested level. If a property is listed, it must specify what stats to compute. approx_count_distinct and count_distinct are mutually exclusive — the server rejects any request that includes both in the same enabled_stats array.","required":["path","stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"self":{"type":"null","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."},"properties":{"type":"null","description":"Explicit configurations for named child properties of this object property. Only listed children receive stats — unlisted ones are skipped entirely.","minItems":1},"items":{"type":"null","description":"Configuration for the array item node of this array property."},"path":{"type":"string","description":"Name of the child property relative to the parent object node. Must be a valid identifier (alphanumeric and underscores, max 256 chars).","maxLength":256,"pattern":"^[a-zA-Z0-9_]+$"},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"object","description":"Statistics configuration for a named property of an object node. The property may itself be primitive or non-primitive (recursive). A property must carry at least one configuration field — there is no no-op/inherited variant at the nested level. If a property is listed, it must specify what stats to compute. approx_count_distinct and count_distinct are mutually exclusive — the server rejects any request that includes both in the same enabled_stats array.","required":["path","self"],"properties":{"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"null","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."}]},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},"path":{"type":"string","description":"Name of the child property relative to the parent object node. Must be a valid identifier (alphanumeric and underscores, max 256 chars).","maxLength":256,"pattern":"^[a-zA-Z0-9_]+$"},"properties":{"oneOf":[{"type":"array","description":"Explicit configurations for named child properties of this object property. Only listed children receive stats — unlisted ones are skipped entirely.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}},{"type":"null","description":"Explicit configurations for named child properties of this object property. Only listed children receive stats — unlisted ones are skipped entirely.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}}]},"items":{"oneOf":[{"type":"object","description":"Configuration for the array item node of this array property.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"self":{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."},"properties":{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1},"items":{"oneOf":[{"type":"null","description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Configuration for the array item node of this array property.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"self":{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."},"properties":{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1},"items":{"oneOf":[{"type":"null","description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"object","description":"Configuration for the array item node of this array property.","required":["self"],"properties":{"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."}]},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},"properties":{"oneOf":[{"type":"array","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}}]},"items":{"oneOf":[{"description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]}},"additionalProperties":false},{"type":"object","description":"Configuration for the array item node of this array property.","required":["properties"],"properties":{"properties":{"oneOf":[{"type":"array","items":{"oneOf":[{}]},"description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1}]},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."}]},"items":{"oneOf":[{"description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]}},"additionalProperties":false},{"type":"object","description":"Configuration for the array item node of this array property.","required":["items"],"properties":{"items":{"oneOf":[{"description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."}]},"properties":{"oneOf":[{"type":"array","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}}]}},"additionalProperties":false},{"type":"null","description":"Configuration for the array item node of this array property."}]}},"additionalProperties":false},{"type":"object","description":"Statistics configuration for a named property of an object node. The property may itself be primitive or non-primitive (recursive). A property must carry at least one configuration field — there is no no-op/inherited variant at the nested level. If a property is listed, it must specify what stats to compute. approx_count_distinct and count_distinct are mutually exclusive — the server rejects any request that includes both in the same enabled_stats array.","required":["path","properties"],"properties":{"properties":{"oneOf":[{"type":"array","items":{"oneOf":[{}]},"description":"Explicit configurations for named child properties of this object property. Only listed children receive stats — unlisted ones are skipped entirely.","minItems":1},{"type":"null","description":"Explicit configurations for named child properties of this object property. Only listed children receive stats — unlisted ones are skipped entirely.","minItems":1}]},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},"path":{"type":"string","description":"Name of the child property relative to the parent object node. Must be a valid identifier (alphanumeric and underscores, max 256 chars).","maxLength":256,"pattern":"^[a-zA-Z0-9_]+$"},"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"null","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."}]},"items":{"oneOf":[{"type":"object","description":"Configuration for the array item node of this array property.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"self":{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."},"properties":{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1},"items":{"oneOf":[{"type":"null","description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Configuration for the array item node of this array property.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"self":{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."},"properties":{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1},"items":{"oneOf":[{"type":"null","description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"object","description":"Configuration for the array item node of this array property.","required":["self"],"properties":{"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."}]},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},"properties":{"oneOf":[{"type":"array","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}}]},"items":{"oneOf":[{"description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]}},"additionalProperties":false},{"type":"object","description":"Configuration for the array item node of this array property.","required":["properties"],"properties":{"properties":{"oneOf":[{"type":"array","items":{"oneOf":[{}]},"description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1}]},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."}]},"items":{"oneOf":[{"description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]}},"additionalProperties":false},{"type":"object","description":"Configuration for the array item node of this array property.","required":["items"],"properties":{"items":{"oneOf":[{"description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."}]},"properties":{"oneOf":[{"type":"array","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}}]}},"additionalProperties":false},{"type":"null","description":"Configuration for the array item node of this array property."}]}},"additionalProperties":false},{"type":"object","description":"Statistics configuration for a named property of an object node. The property may itself be primitive or non-primitive (recursive). A property must carry at least one configuration field — there is no no-op/inherited variant at the nested level. If a property is listed, it must specify what stats to compute. approx_count_distinct and count_distinct are mutually exclusive — the server rejects any request that includes both in the same enabled_stats array.","required":["path","items"],"properties":{"items":{"oneOf":[{"type":"object","description":"Configuration for the array item node of this array property.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"self":{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."},"properties":{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1},"items":{"oneOf":[{"type":"null","description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Configuration for the array item node of this array property.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"self":{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."},"properties":{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1},"items":{"oneOf":[{"type":"null","description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"object","description":"Configuration for the array item node of this array property.","required":["self"],"properties":{"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."}]},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},"properties":{"oneOf":[{"type":"array","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}}]},"items":{"oneOf":[{"description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]}},"additionalProperties":false},{"type":"object","description":"Configuration for the array item node of this array property.","required":["properties"],"properties":{"properties":{"oneOf":[{"type":"array","items":{"oneOf":[{}]},"description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1}]},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."}]},"items":{"oneOf":[{"description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]}},"additionalProperties":false},{"type":"object","description":"Configuration for the array item node of this array property.","required":["items"],"properties":{"items":{"oneOf":[{"description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."}]},"properties":{"oneOf":[{"type":"array","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}}]}},"additionalProperties":false},{"type":"null","description":"Configuration for the array item node of this array property."}]},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},"path":{"type":"string","description":"Name of the child property relative to the parent object node. Must be a valid identifier (alphanumeric and underscores, max 256 chars).","maxLength":256,"pattern":"^[a-zA-Z0-9_]+$"},"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"null","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."}]},"properties":{"oneOf":[{"type":"array","description":"Explicit configurations for named child properties of this object property. Only listed children receive stats — unlisted ones are skipped entirely.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}},{"type":"null","description":"Explicit configurations for named child properties of this object property. Only listed children receive stats — unlisted ones are skipped entirely.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}}]}},"additionalProperties":false}]},"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.1","typeLabel":"null"}],"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties","typeLabel":"object[] | null"},"items":{"oneOf":[{"type":"object","description":"Configuration for the array item node.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.0.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.0.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.0.enabled_stats.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.0.enabled_stats","typeLabel":"enum\u003cstring>[] | null"},"self":{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.0.self","typeLabel":"null"},"properties":{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.0.properties","typeLabel":"null"},"items":{"oneOf":[{"type":"null","description":"Configuration for the array item node.","uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.0.\\items.oneOf.0","typeLabel":"null"},{"type":"null","description":"Configuration for the array item node.","uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.0.\\items.oneOf.1","typeLabel":"null"}],"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.0.\\items","typeLabel":"null"},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.0.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.0.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.0.stat_options.oneOf.0.histogram","typeLabel":"object"}},"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.0.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.0.stat_options.oneOf.1","typeLabel":"null"}],"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.0.stat_options","typeLabel":"object | null"}},"additionalProperties":false,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.0","typeLabel":"object"},{"type":"object","description":"Configuration for the array item node.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.1.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.1.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.1.stat_options.oneOf.0.histogram","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.1.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.1.stat_options.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.1.stat_options","typeLabel":"object | null"},"self":{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.1.self","typeLabel":"null"},"properties":{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.1.properties","typeLabel":"null"},"items":{"oneOf":[{"type":"null","description":"Configuration for the array item node.","uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.1.\\items.oneOf.0","typeLabel":"null"},{"type":"null","description":"Configuration for the array item node.","uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.1.\\items.oneOf.1","typeLabel":"null"}],"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.1.\\items","typeLabel":"null"},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.1.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.1.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.1.enabled_stats.oneOf.1","typeLabel":"null"}],"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.1.enabled_stats","typeLabel":"enum\u003cstring>[] | null"}},"additionalProperties":false,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.1","typeLabel":"object"},{"type":"object","description":"Configuration for the array item node.","required":["self"],"properties":{"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.self.oneOf.0.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.self.oneOf.0.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.self.oneOf.0.enabled_stats.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.self.oneOf.0.enabled_stats","typeLabel":"enum\u003cstring>[] | null"},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.self.oneOf.0.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.self.oneOf.0.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.self.oneOf.0.stat_options.oneOf.0.histogram","typeLabel":"object"}},"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.self.oneOf.0.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.self.oneOf.0.stat_options.oneOf.1","typeLabel":"null"}],"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.self.oneOf.0.stat_options","typeLabel":"object | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.self.oneOf.0","typeLabel":"object"},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.self.oneOf.1.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.self.oneOf.1.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.self.oneOf.1.stat_options.oneOf.0.histogram","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.self.oneOf.1.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.self.oneOf.1.stat_options.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.self.oneOf.1.stat_options","typeLabel":"object | null"},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.self.oneOf.1.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.self.oneOf.1.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.self.oneOf.1.enabled_stats.oneOf.1","typeLabel":"null"}],"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.self.oneOf.1.enabled_stats","typeLabel":"enum\u003cstring>[] | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.self.oneOf.1","typeLabel":"object"},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","isRequired":true,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.self.oneOf.2","typeLabel":"null"}],"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.self","typeLabel":"object · object · null"},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.enabled_stats","typeLabel":"null"},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.stat_options","typeLabel":"null"},"properties":{"oneOf":[{"type":"array","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"},"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.properties.oneOf.0","typeLabel":"array"},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"},"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.properties.oneOf.1","typeLabel":"null"}],"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.properties","typeLabel":"array | null"},"items":{"oneOf":[{"description":"Configuration for the array item node.","uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.\\items.oneOf.0","typeLabel":"any"},{"type":"null","description":"Configuration for the array item node.","uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.\\items.oneOf.1","typeLabel":"null"}],"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.\\items","typeLabel":"any | null"}},"additionalProperties":false,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.2","typeLabel":"object"},{"type":"object","description":"Configuration for the array item node.","required":["properties"],"properties":{"properties":{"oneOf":[{"type":"array","items":{"oneOf":[{}],"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.properties.oneOf.0.items.[INDEX]","typeLabel":"any"},"description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.properties.oneOf.0","typeLabel":"any[]"},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.properties.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.properties","typeLabel":"any[] | null"},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.enabled_stats","typeLabel":"null"},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.stat_options","typeLabel":"null"},"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.self.oneOf.0.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.self.oneOf.0.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.self.oneOf.0.enabled_stats.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.self.oneOf.0.enabled_stats","typeLabel":"enum\u003cstring>[] | null"},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.self.oneOf.0.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.self.oneOf.0.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.self.oneOf.0.stat_options.oneOf.0.histogram","typeLabel":"object"}},"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.self.oneOf.0.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.self.oneOf.0.stat_options.oneOf.1","typeLabel":"null"}],"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.self.oneOf.0.stat_options","typeLabel":"object | null"}},"additionalProperties":false,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.self.oneOf.0","typeLabel":"object"},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.self.oneOf.1.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.self.oneOf.1.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.self.oneOf.1.stat_options.oneOf.0.histogram","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.self.oneOf.1.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.self.oneOf.1.stat_options.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.self.oneOf.1.stat_options","typeLabel":"object | null"},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.self.oneOf.1.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.self.oneOf.1.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.self.oneOf.1.enabled_stats.oneOf.1","typeLabel":"null"}],"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.self.oneOf.1.enabled_stats","typeLabel":"enum\u003cstring>[] | null"}},"additionalProperties":false,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.self.oneOf.1","typeLabel":"object"},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.self.oneOf.2","typeLabel":"null"}],"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.self","typeLabel":"object · object · null"},"items":{"oneOf":[{"description":"Configuration for the array item node.","uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.\\items.oneOf.0","typeLabel":"any"},{"type":"null","description":"Configuration for the array item node.","uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.\\items.oneOf.1","typeLabel":"null"}],"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.\\items","typeLabel":"any | null"}},"additionalProperties":false,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.3","typeLabel":"object"},{"type":"object","description":"Configuration for the array item node.","required":["items"],"properties":{"items":{"oneOf":[{"description":"Configuration for the array item node.","isRequired":true,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.\\items.oneOf.0","typeLabel":"any"},{"type":"null","description":"Configuration for the array item node.","isRequired":true,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.\\items.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.\\items","typeLabel":"any | null"},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.enabled_stats","typeLabel":"null"},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.stat_options","typeLabel":"null"},"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.self.oneOf.0.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.self.oneOf.0.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.self.oneOf.0.enabled_stats.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.self.oneOf.0.enabled_stats","typeLabel":"enum\u003cstring>[] | null"},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.self.oneOf.0.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.self.oneOf.0.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.self.oneOf.0.stat_options.oneOf.0.histogram","typeLabel":"object"}},"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.self.oneOf.0.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.self.oneOf.0.stat_options.oneOf.1","typeLabel":"null"}],"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.self.oneOf.0.stat_options","typeLabel":"object | null"}},"additionalProperties":false,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.self.oneOf.0","typeLabel":"object"},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.self.oneOf.1.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.self.oneOf.1.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.self.oneOf.1.stat_options.oneOf.0.histogram","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.self.oneOf.1.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.self.oneOf.1.stat_options.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.self.oneOf.1.stat_options","typeLabel":"object | null"},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.self.oneOf.1.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.self.oneOf.1.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.self.oneOf.1.enabled_stats.oneOf.1","typeLabel":"null"}],"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.self.oneOf.1.enabled_stats","typeLabel":"enum\u003cstring>[] | null"}},"additionalProperties":false,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.self.oneOf.1","typeLabel":"object"},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.self.oneOf.2","typeLabel":"null"}],"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.self","typeLabel":"object · object · null"},"properties":{"oneOf":[{"type":"array","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"},"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.properties.oneOf.0","typeLabel":"array"},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"},"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.properties.oneOf.1","typeLabel":"null"}],"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.properties","typeLabel":"array | null"}},"additionalProperties":false,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.4","typeLabel":"object"},{"type":"null","description":"Configuration for the array item node.","uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.5","typeLabel":"null"}],"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items","typeLabel":"object · object · object · object · object · null"}},"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX]","typeLabel":"object"},"description":"Per-field overrides for individual Rosetta Stone attributes.","isRequired":true,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.0","typeLabel":"object[]"},{"type":"null","description":"Per-field overrides for individual Rosetta Stone attributes.","isRequired":true,"uniqueKey":"rosetta_stone.oneOf.1.fields.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.1.fields","typeLabel":"object[] | null"},"scope":{"oneOf":[{"type":"object","description":"A stat selection with optional per-stat configuration. At least one of enabled_stats or stat_options must be provided. An empty enabled_stats array explicitly disables all stats for this scope. approx_count_distinct and count_distinct are mutually exclusive — the server rejects any request that includes both in the same enabled_stats array.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"rosetta_stone.oneOf.1.scope.oneOf.0.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.1.scope.oneOf.0.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.1.scope.oneOf.0.enabled_stats.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.1.scope.oneOf.0.enabled_stats","typeLabel":"enum\u003cstring>[] | null"},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"rosetta_stone.oneOf.1.scope.oneOf.0.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"rosetta_stone.oneOf.1.scope.oneOf.0.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"rosetta_stone.oneOf.1.scope.oneOf.0.stat_options.oneOf.0.histogram","typeLabel":"object"}},"uniqueKey":"rosetta_stone.oneOf.1.scope.oneOf.0.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"uniqueKey":"rosetta_stone.oneOf.1.scope.oneOf.0.stat_options.oneOf.1","typeLabel":"null"}],"uniqueKey":"rosetta_stone.oneOf.1.scope.oneOf.0.stat_options","typeLabel":"object | null"}},"additionalProperties":false,"uniqueKey":"rosetta_stone.oneOf.1.scope.oneOf.0","typeLabel":"object"},{"type":"object","description":"A stat selection with optional per-stat configuration. At least one of enabled_stats or stat_options must be provided. An empty enabled_stats array explicitly disables all stats for this scope. approx_count_distinct and count_distinct are mutually exclusive — the server rejects any request that includes both in the same enabled_stats array.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"rosetta_stone.oneOf.1.scope.oneOf.1.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"rosetta_stone.oneOf.1.scope.oneOf.1.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"rosetta_stone.oneOf.1.scope.oneOf.1.stat_options.oneOf.0.histogram","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.1.scope.oneOf.1.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.1.scope.oneOf.1.stat_options.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"rosetta_stone.oneOf.1.scope.oneOf.1.stat_options","typeLabel":"object | null"},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"rosetta_stone.oneOf.1.scope.oneOf.1.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"rosetta_stone.oneOf.1.scope.oneOf.1.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"rosetta_stone.oneOf.1.scope.oneOf.1.enabled_stats.oneOf.1","typeLabel":"null"}],"uniqueKey":"rosetta_stone.oneOf.1.scope.oneOf.1.enabled_stats","typeLabel":"enum\u003cstring>[] | null"}},"additionalProperties":false,"uniqueKey":"rosetta_stone.oneOf.1.scope.oneOf.1","typeLabel":"object"},{"type":"null","uniqueKey":"rosetta_stone.oneOf.1.scope.oneOf.2","typeLabel":"null"}],"uniqueKey":"rosetta_stone.oneOf.1.scope","typeLabel":"object · object · null"}},"additionalProperties":false,"uniqueKey":"rosetta_stone.oneOf.1","typeLabel":"object"},{"type":"null","description":"Configuration for Rosetta Stone attributes. Use 'scope' to override defaults for all Rosetta Stone fields, or to disable the namespace entirely via enabled_stats: []. Use 'fields' for per-field overrides. Null when the config does not touch this namespace.","uniqueKey":"rosetta_stone.oneOf.2","typeLabel":"null"}],"uniqueKey":"rosetta_stone","typeLabel":"object · object · null"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"defaults":{"enabled_stats":[],"stat_options":{"histogram":{"max_bins":50,"overflow":"none"}}},"refresh":{"trigger":"cron","cron_expression":"\u003cstring>"},"dataset":{"scope":{"enabled_stats":[],"stat_options":{"histogram":{"max_bins":50,"overflow":"none"}}},"fields":[{"field_name":"\u003cstring>","enabled_stats":[],"stat_options":{"histogram":{"max_bins":50,"overflow":"none"}},"self":{"enabled_stats":[],"stat_options":{"histogram":{"max_bins":50,"overflow":"none"}}},"properties":[{"enabled_stats":[],"path":"\u003cstring>","self":null,"properties":null,"items":null,"stat_options":{"histogram":{"max_bins":50,"overflow":"none"}}}],"items":{"enabled_stats":[],"self":null,"properties":null,"items":null,"stat_options":{"histogram":{"max_bins":50,"overflow":"none"}}}}]},"rosetta_stone":{"scope":{"enabled_stats":[],"stat_options":{"histogram":{"max_bins":50,"overflow":"none"}}},"fields":[{"attribute_name":"\u003cstring>","enabled_stats":[],"stat_options":{"histogram":{"max_bins":50,"overflow":"none"}},"self":{"enabled_stats":[],"stat_options":{"histogram":{"max_bins":50,"overflow":"none"}}},"properties":[{"enabled_stats":[],"path":"\u003cstring>","self":null,"properties":null,"items":null,"stat_options":{"histogram":{"max_bins":50,"overflow":"none"}}}],"items":{"enabled_stats":[],"self":null,"properties":null,"items":null,"stat_options":{"histogram":{"max_bins":50,"overflow":"none"}}}}]}}}},"exampleType":"generated"}},"exampleType":"generated"},"responses":{"2d316201-d633-4898-ba83-8d0b328653f9":{"description":"OK","content":{"application/json":{"schema":{"type":"object","description":"Full statistics configuration entity with metadata. Returned by both PUT (create/update) and GET endpoints.","required":["id","dataset_id","version","created_at","created_by","configuration"],"additionalProperties":false,"properties":{"id":{"type":"string","format":"uuid","description":"Unique identifier for this configuration version.","isRequired":true,"uniqueKey":"id","typeLabel":"string\u003cuuid>"},"dataset_id":{"type":"integer","format":"int64","description":"The dataset this configuration belongs to.","isRequired":true,"uniqueKey":"dataset_id","typeLabel":"integer\u003cint64>"},"version":{"type":"integer","format":"int32","description":"Monotonically increasing version number.","isRequired":true,"uniqueKey":"version","typeLabel":"integer\u003cint32>"},"created_at":{"type":"string","format":"date-time","description":"Timestamp when this configuration version was created.","isRequired":true,"uniqueKey":"created_at","typeLabel":"string\u003cdate-time>"},"created_by":{"type":"integer","format":"int64","description":"User ID of the user who created this configuration version.","isRequired":true,"uniqueKey":"created_by","typeLabel":"integer\u003cint64>"},"configuration":{"type":"object","description":"The full statistics configuration payload.","required":["defaults","refresh"],"additionalProperties":false,"properties":{"defaults":{"oneOf":[{"type":"object","description":"Global default stat configuration applied to all eligible fields and properties. The server automatically filters stats incompatible with a field's resolved type and node kind. Note: enabled_stats is required for defaults because there is no parent scope to inherit from. Providing only stat_options without enabled_stats is invalid at this level.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"configuration.defaults.oneOf.0.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"configuration.defaults.oneOf.0.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"configuration.defaults.oneOf.0.enabled_stats.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.defaults.oneOf.0.enabled_stats","typeLabel":"enum\u003cstring>[] | null"},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"configuration.defaults.oneOf.0.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"configuration.defaults.oneOf.0.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"configuration.defaults.oneOf.0.stat_options.oneOf.0.histogram","typeLabel":"object"}},"uniqueKey":"configuration.defaults.oneOf.0.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"uniqueKey":"configuration.defaults.oneOf.0.stat_options.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.defaults.oneOf.0.stat_options","typeLabel":"object | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.defaults.oneOf.0","typeLabel":"object"},{"type":"object","description":"Global default stat configuration applied to all eligible fields and properties. The server automatically filters stats incompatible with a field's resolved type and node kind. Note: enabled_stats is required for defaults because there is no parent scope to inherit from. Providing only stat_options without enabled_stats is invalid at this level.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"configuration.defaults.oneOf.1.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"configuration.defaults.oneOf.1.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"configuration.defaults.oneOf.1.stat_options.oneOf.0.histogram","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.defaults.oneOf.1.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.defaults.oneOf.1.stat_options.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.defaults.oneOf.1.stat_options","typeLabel":"object | null"},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"configuration.defaults.oneOf.1.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"configuration.defaults.oneOf.1.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"configuration.defaults.oneOf.1.enabled_stats.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.defaults.oneOf.1.enabled_stats","typeLabel":"enum\u003cstring>[] | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.defaults.oneOf.1","typeLabel":"object"}],"isRequired":true,"uniqueKey":"configuration.defaults","typeLabel":"object"},"refresh":{"oneOf":[{"type":"object","description":"When to recompute statistics. Exactly one trigger type must be specified.","required":["trigger","cron_expression"],"properties":{"trigger":{"type":"string","enum":["cron"],"isRequired":true,"uniqueKey":"configuration.refresh.oneOf.0.trigger","typeLabel":"enum\u003cstring>"},"cron_expression":{"type":"string","minLength":1,"description":"A standard 5-field cron expression defining the refresh schedule. All times are interpreted in UTC.\n\n## Format\n\n``` ┌───────────── minute (0–59) │ ┌───────────── hour (0–23) │ │ ┌───────────── day of month (1–31) │ │ │ ┌───────────── month (1–12) │ │ │ │ ┌───────────── day of week (0–7, where 0 and 7 = Sunday) │ │ │ │ │ * * * * * ```\n\n## Supported syntax\n\n- `*` — every value in the field's range\n- `,` — list separator (e.g. `1,15` for the 1st and 15th)\n- `-` — range (e.g. `1-5` for Monday through Friday)\n- `/` — step (e.g. `*/15` in the minute field = every 15 minutes)\n- `?` — unspecified, allowed in day-of-month and day-of-week\n- `L` — last day, allowed in day-of-month (last day of month) and day-of-week (`5L` = last Friday)\n- `W` — nearest weekday, allowed in day-of-month (e.g. `15W` = nearest weekday to the 15th)\n- `LW` — last weekday of the month, allowed in day-of-month\n- `#` — nth occurrence, allowed in day-of-week (e.g. `5#3` = third Friday)\n- Nicknames: `@yearly`, `@annually`, `@monthly`, `@weekly`, `@daily`, `@midnight`, `@hourly`\n\n## Day-of-week numbering\n\nMonday = 1 through Saturday = 6, Sunday = 0 or 7. Both `0` and `7` map to Sunday.\n\n## Examples\n\n| Expression | Meaning | |-------------------|----------------------------------------| | `0 0 * * *` | Every day at midnight UTC | | `0 3 * * 1` | Every Monday at 03:00 UTC | | `*/15 * * * *` | Every 15 minutes | | `0 0 1 * *` | First day of every month at midnight | | `0 6 * * 1-5` | Weekdays at 06:00 UTC | | `0 0 L * ?` | Last day of every month at midnight | | `0 9 ? * 5#1` | First Friday of every month at 09:00 | | `@daily` | Equivalent to `0 0 * * *` |","isRequired":true,"uniqueKey":"configuration.refresh.oneOf.0.cron_expression","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.refresh.oneOf.0","typeLabel":"object"},{"type":"object","description":"When to recompute statistics. Exactly one trigger type must be specified.","required":["trigger"],"properties":{"trigger":{"type":"string","enum":["on_update"],"isRequired":true,"uniqueKey":"configuration.refresh.oneOf.1.trigger","typeLabel":"enum\u003cstring>"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.refresh.oneOf.1","typeLabel":"object"},{"type":"object","description":"When to recompute statistics. Exactly one trigger type must be specified.","required":["trigger"],"properties":{"trigger":{"type":"string","enum":["manual"],"isRequired":true,"uniqueKey":"configuration.refresh.oneOf.2.trigger","typeLabel":"enum\u003cstring>"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.refresh.oneOf.2","typeLabel":"object"}],"isRequired":true,"uniqueKey":"configuration.refresh","typeLabel":"object"},"dataset":{"oneOf":[{"type":"object","description":"Configuration for dataset schema columns. Use 'scope' to override defaults for all dataset fields, or to disable the namespace entirely via enabled_stats: []. Use 'fields' for per-field overrides. Null when the config does not touch this namespace.","required":["scope"],"properties":{"scope":{"oneOf":[{"type":"object","description":"A stat selection with optional per-stat configuration. At least one of enabled_stats or stat_options must be provided. An empty enabled_stats array explicitly disables all stats for this scope. approx_count_distinct and count_distinct are mutually exclusive — the server rejects any request that includes both in the same enabled_stats array.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"configuration.dataset.oneOf.0.scope.oneOf.0.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.0.scope.oneOf.0.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.0.scope.oneOf.0.enabled_stats.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.0.scope.oneOf.0.enabled_stats","typeLabel":"enum\u003cstring>[] | null"},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"configuration.dataset.oneOf.0.scope.oneOf.0.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"configuration.dataset.oneOf.0.scope.oneOf.0.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"configuration.dataset.oneOf.0.scope.oneOf.0.stat_options.oneOf.0.histogram","typeLabel":"object"}},"uniqueKey":"configuration.dataset.oneOf.0.scope.oneOf.0.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"uniqueKey":"configuration.dataset.oneOf.0.scope.oneOf.0.stat_options.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.dataset.oneOf.0.scope.oneOf.0.stat_options","typeLabel":"object | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.0.scope.oneOf.0","typeLabel":"object"},{"type":"object","description":"A stat selection with optional per-stat configuration. At least one of enabled_stats or stat_options must be provided. An empty enabled_stats array explicitly disables all stats for this scope. approx_count_distinct and count_distinct are mutually exclusive — the server rejects any request that includes both in the same enabled_stats array.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"configuration.dataset.oneOf.0.scope.oneOf.1.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"configuration.dataset.oneOf.0.scope.oneOf.1.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"configuration.dataset.oneOf.0.scope.oneOf.1.stat_options.oneOf.0.histogram","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.0.scope.oneOf.1.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.0.scope.oneOf.1.stat_options.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.0.scope.oneOf.1.stat_options","typeLabel":"object | null"},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"configuration.dataset.oneOf.0.scope.oneOf.1.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"configuration.dataset.oneOf.0.scope.oneOf.1.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"configuration.dataset.oneOf.0.scope.oneOf.1.enabled_stats.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.dataset.oneOf.0.scope.oneOf.1.enabled_stats","typeLabel":"enum\u003cstring>[] | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.0.scope.oneOf.1","typeLabel":"object"},{"type":"null","isRequired":true,"uniqueKey":"configuration.dataset.oneOf.0.scope.oneOf.2","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.0.scope","typeLabel":"object · object · null"},"fields":{"oneOf":[{"type":"array","description":"Per-field overrides for individual dataset columns.","items":{"type":"object","description":"Common stat configuration shared by dataset and Rosetta Stone field configs. Exactly one of three modes must be used (the server rejects invalid combinations):\n\n1. **Primitive field** — provide enabled_stats and/or stat_options at the top level.\n Must not include self, properties, or items.\n\n2. **Non-primitive field** — provide self, properties, and/or items for nested structure.\n Must not include enabled_stats or stat_options at this level;\n use self for node-level stat configuration instead.\n\n3. **No-op / inherit** — leave all stat fields null or absent. The field inherits its\n configuration from the namespace scope or global defaults.\n\n\nThis schema deliberately has no `oneOf` over the three modes. Mode 3 is all five slots null, which matches neither of the other two, so a closed union here would reject it.\nClosing this schema is left to the two that compose it. `additionalProperties: false` here would only see the properties below, so it would reject the `field_name` and `attribute_name` its siblings contribute; `DatasetFieldConfig` and `RosettaStoneFieldConfig` use `unevaluatedProperties: false`, which sees the whole composition.","required":["field_name"],"properties":{"field_name":{"type":"string","description":"The column name as defined in the dataset schema. Must be a valid identifier (alphanumeric and underscores, max 256 chars).","maxLength":256,"pattern":"^[a-zA-Z0-9_]+$","isRequired":true,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].field_name","typeLabel":"string"},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].enabled_stats.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].enabled_stats","typeLabel":"enum\u003cstring>[] | null"},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].stat_options.oneOf.0.histogram","typeLabel":"object"}},"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].stat_options.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].stat_options","typeLabel":"object | null"},"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive field node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].self.oneOf.0.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].self.oneOf.0.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].self.oneOf.0.enabled_stats.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].self.oneOf.0.enabled_stats","typeLabel":"enum\u003cstring>[] | null"},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].self.oneOf.0.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].self.oneOf.0.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].self.oneOf.0.stat_options.oneOf.0.histogram","typeLabel":"object"}},"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].self.oneOf.0.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].self.oneOf.0.stat_options.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].self.oneOf.0.stat_options","typeLabel":"object | null"}},"additionalProperties":false,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].self.oneOf.0","typeLabel":"object"},{"type":"object","description":"Statistics for the non-primitive field node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].self.oneOf.1.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].self.oneOf.1.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].self.oneOf.1.stat_options.oneOf.0.histogram","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].self.oneOf.1.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].self.oneOf.1.stat_options.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].self.oneOf.1.stat_options","typeLabel":"object | null"},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].self.oneOf.1.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].self.oneOf.1.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].self.oneOf.1.enabled_stats.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].self.oneOf.1.enabled_stats","typeLabel":"enum\u003cstring>[] | null"}},"additionalProperties":false,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].self.oneOf.1","typeLabel":"object"},{"type":"null","description":"Statistics for the non-primitive field node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].self.oneOf.2","typeLabel":"null"}],"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].self","typeLabel":"object · object · null"},"properties":{"oneOf":[{"type":"array","description":"Explicit configurations for named child properties of an object field. Only listed children receive stats — unlisted ones are skipped entirely.","minItems":1,"items":{"oneOf":[{"type":"object","description":"Statistics configuration for a named property of an object node. The property may itself be primitive or non-primitive (recursive). A property must carry at least one configuration field — there is no no-op/inherited variant at the nested level. If a property is listed, it must specify what stats to compute. approx_count_distinct and count_distinct are mutually exclusive — the server rejects any request that includes both in the same enabled_stats array.","required":["path","enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.0.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.0.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.0.enabled_stats.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.0.enabled_stats","typeLabel":"enum\u003cstring>[] | null"},"path":{"type":"string","description":"Name of the child property relative to the parent object node. Must be a valid identifier (alphanumeric and underscores, max 256 chars).","maxLength":256,"pattern":"^[a-zA-Z0-9_]+$","isRequired":true,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.0.path","typeLabel":"string"},"self":{"type":"null","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.0.self","typeLabel":"null"},"properties":{"type":"null","description":"Explicit configurations for named child properties of this object property. Only listed children receive stats — unlisted ones are skipped entirely.","minItems":1,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.0.properties","typeLabel":"null"},"items":{"type":"null","description":"Configuration for the array item node of this array property.","uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.0.\\items","typeLabel":"null"},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.0.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.0.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.0.stat_options.oneOf.0.histogram","typeLabel":"object"}},"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.0.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.0.stat_options.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.0.stat_options","typeLabel":"object | null"}},"additionalProperties":false,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.0","typeLabel":"object"},{"type":"object","description":"Statistics configuration for a named property of an object node. The property may itself be primitive or non-primitive (recursive). A property must carry at least one configuration field — there is no no-op/inherited variant at the nested level. If a property is listed, it must specify what stats to compute. approx_count_distinct and count_distinct are mutually exclusive — the server rejects any request that includes both in the same enabled_stats array.","required":["path","stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.1.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.1.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.1.stat_options.oneOf.0.histogram","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.1.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.1.stat_options.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.1.stat_options","typeLabel":"object | null"},"path":{"type":"string","description":"Name of the child property relative to the parent object node. Must be a valid identifier (alphanumeric and underscores, max 256 chars).","maxLength":256,"pattern":"^[a-zA-Z0-9_]+$","isRequired":true,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.1.path","typeLabel":"string"},"self":{"type":"null","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.1.self","typeLabel":"null"},"properties":{"type":"null","description":"Explicit configurations for named child properties of this object property. Only listed children receive stats — unlisted ones are skipped entirely.","minItems":1,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.1.properties","typeLabel":"null"},"items":{"type":"null","description":"Configuration for the array item node of this array property.","uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.1.\\items","typeLabel":"null"},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.1.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.1.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.1.enabled_stats.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.1.enabled_stats","typeLabel":"enum\u003cstring>[] | null"}},"additionalProperties":false,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.1","typeLabel":"object"},{"type":"object","description":"Statistics configuration for a named property of an object node. The property may itself be primitive or non-primitive (recursive). A property must carry at least one configuration field — there is no no-op/inherited variant at the nested level. If a property is listed, it must specify what stats to compute. approx_count_distinct and count_distinct are mutually exclusive — the server rejects any request that includes both in the same enabled_stats array.","required":["path","self"],"properties":{"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.self.oneOf.0.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.self.oneOf.0.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.self.oneOf.0.enabled_stats.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.self.oneOf.0.enabled_stats","typeLabel":"enum\u003cstring>[] | null"},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.self.oneOf.0.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.self.oneOf.0.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.self.oneOf.0.stat_options.oneOf.0.histogram","typeLabel":"object"}},"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.self.oneOf.0.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.self.oneOf.0.stat_options.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.self.oneOf.0.stat_options","typeLabel":"object | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.self.oneOf.0","typeLabel":"object"},{"type":"object","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.self.oneOf.1.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.self.oneOf.1.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.self.oneOf.1.stat_options.oneOf.0.histogram","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.self.oneOf.1.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.self.oneOf.1.stat_options.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.self.oneOf.1.stat_options","typeLabel":"object | null"},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.self.oneOf.1.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.self.oneOf.1.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.self.oneOf.1.enabled_stats.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.self.oneOf.1.enabled_stats","typeLabel":"enum\u003cstring>[] | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.self.oneOf.1","typeLabel":"object"},{"type":"null","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","isRequired":true,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.self.oneOf.2","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.self","typeLabel":"object · object · null"},"path":{"type":"string","description":"Name of the child property relative to the parent object node. Must be a valid identifier (alphanumeric and underscores, max 256 chars).","maxLength":256,"pattern":"^[a-zA-Z0-9_]+$","isRequired":true,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.path","typeLabel":"string"},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.enabled_stats","typeLabel":"null"},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.stat_options","typeLabel":"null"},"properties":{"oneOf":[{"type":"array","description":"Explicit configurations for named child properties of this object property. Only listed children receive stats — unlisted ones are skipped entirely.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"},"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.properties.oneOf.0","typeLabel":"array"},{"type":"null","description":"Explicit configurations for named child properties of this object property. Only listed children receive stats — unlisted ones are skipped entirely.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"},"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.properties.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.properties","typeLabel":"array | null"},"items":{"oneOf":[{"type":"object","description":"Configuration for the array item node of this array property.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.0.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.0.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.0.enabled_stats.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.0.enabled_stats","typeLabel":"enum\u003cstring>[] | null"},"self":{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.0.self","typeLabel":"null"},"properties":{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.0.properties","typeLabel":"null"},"items":{"oneOf":[{"type":"null","description":"Configuration for the array item node.","uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.0.\\items.oneOf.0","typeLabel":"null"},{"type":"null","description":"Configuration for the array item node.","uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.0.\\items.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.0.\\items","typeLabel":"null"},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.0.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.0.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.0.stat_options.oneOf.0.histogram","typeLabel":"object"}},"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.0.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.0.stat_options.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.0.stat_options","typeLabel":"object | null"}},"additionalProperties":false,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.0","typeLabel":"object"},{"type":"object","description":"Configuration for the array item node of this array property.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.1.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.1.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.1.stat_options.oneOf.0.histogram","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.1.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.1.stat_options.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.1.stat_options","typeLabel":"object | null"},"self":{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.1.self","typeLabel":"null"},"properties":{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.1.properties","typeLabel":"null"},"items":{"oneOf":[{"type":"null","description":"Configuration for the array item node.","uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.1.\\items.oneOf.0","typeLabel":"null"},{"type":"null","description":"Configuration for the array item node.","uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.1.\\items.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.1.\\items","typeLabel":"null"},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.1.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.1.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.1.enabled_stats.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.1.enabled_stats","typeLabel":"enum\u003cstring>[] | null"}},"additionalProperties":false,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.1","typeLabel":"object"},{"type":"object","description":"Configuration for the array item node of this array property.","required":["self"],"properties":{"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.self.oneOf.0.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.self.oneOf.0.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.self.oneOf.0.enabled_stats.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.self.oneOf.0.enabled_stats","typeLabel":"enum\u003cstring>[] | null"},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.self.oneOf.0.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.self.oneOf.0.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.self.oneOf.0.stat_options.oneOf.0.histogram","typeLabel":"object"}},"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.self.oneOf.0.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.self.oneOf.0.stat_options.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.self.oneOf.0.stat_options","typeLabel":"object | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.self.oneOf.0","typeLabel":"object"},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.self.oneOf.1.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.self.oneOf.1.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.self.oneOf.1.stat_options.oneOf.0.histogram","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.self.oneOf.1.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.self.oneOf.1.stat_options.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.self.oneOf.1.stat_options","typeLabel":"object | null"},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.self.oneOf.1.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.self.oneOf.1.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.self.oneOf.1.enabled_stats.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.self.oneOf.1.enabled_stats","typeLabel":"enum\u003cstring>[] | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.self.oneOf.1","typeLabel":"object"},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","isRequired":true,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.self.oneOf.2","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.self","typeLabel":"object · object · null"},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.enabled_stats","typeLabel":"null"},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.stat_options","typeLabel":"null"},"properties":{"oneOf":[{"type":"array","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"},"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.properties.oneOf.0","typeLabel":"array"},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"},"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.properties.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.properties","typeLabel":"array | null"},"items":{"oneOf":[{"description":"Configuration for the array item node.","uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.\\items.oneOf.0","typeLabel":"any"},{"type":"null","description":"Configuration for the array item node.","uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.\\items.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.\\items","typeLabel":"any | null"}},"additionalProperties":false,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2","typeLabel":"object"},{"type":"object","description":"Configuration for the array item node of this array property.","required":["properties"],"properties":{"properties":{"oneOf":[{"type":"array","items":{"oneOf":[{}],"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.properties.oneOf.0.items.[INDEX]","typeLabel":"any"},"description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.properties.oneOf.0","typeLabel":"any[]"},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.properties.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.properties","typeLabel":"any[] | null"},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.enabled_stats","typeLabel":"null"},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.stat_options","typeLabel":"null"},"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.self.oneOf.0.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.self.oneOf.0.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.self.oneOf.0.enabled_stats.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.self.oneOf.0.enabled_stats","typeLabel":"enum\u003cstring>[] | null"},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.self.oneOf.0.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.self.oneOf.0.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.self.oneOf.0.stat_options.oneOf.0.histogram","typeLabel":"object"}},"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.self.oneOf.0.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.self.oneOf.0.stat_options.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.self.oneOf.0.stat_options","typeLabel":"object | null"}},"additionalProperties":false,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.self.oneOf.0","typeLabel":"object"},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.self.oneOf.1.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.self.oneOf.1.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.self.oneOf.1.stat_options.oneOf.0.histogram","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.self.oneOf.1.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.self.oneOf.1.stat_options.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.self.oneOf.1.stat_options","typeLabel":"object | null"},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.self.oneOf.1.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.self.oneOf.1.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.self.oneOf.1.enabled_stats.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.self.oneOf.1.enabled_stats","typeLabel":"enum\u003cstring>[] | null"}},"additionalProperties":false,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.self.oneOf.1","typeLabel":"object"},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.self.oneOf.2","typeLabel":"null"}],"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.self","typeLabel":"object · object · null"},"items":{"oneOf":[{"description":"Configuration for the array item node.","uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.\\items.oneOf.0","typeLabel":"any"},{"type":"null","description":"Configuration for the array item node.","uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.\\items.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.\\items","typeLabel":"any | null"}},"additionalProperties":false,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3","typeLabel":"object"},{"type":"object","description":"Configuration for the array item node of this array property.","required":["items"],"properties":{"items":{"oneOf":[{"description":"Configuration for the array item node.","isRequired":true,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.\\items.oneOf.0","typeLabel":"any"},{"type":"null","description":"Configuration for the array item node.","isRequired":true,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.\\items.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.\\items","typeLabel":"any | null"},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.enabled_stats","typeLabel":"null"},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.stat_options","typeLabel":"null"},"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.self.oneOf.0.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.self.oneOf.0.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.self.oneOf.0.enabled_stats.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.self.oneOf.0.enabled_stats","typeLabel":"enum\u003cstring>[] | null"},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.self.oneOf.0.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.self.oneOf.0.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.self.oneOf.0.stat_options.oneOf.0.histogram","typeLabel":"object"}},"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.self.oneOf.0.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.self.oneOf.0.stat_options.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.self.oneOf.0.stat_options","typeLabel":"object | null"}},"additionalProperties":false,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.self.oneOf.0","typeLabel":"object"},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.self.oneOf.1.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.self.oneOf.1.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.self.oneOf.1.stat_options.oneOf.0.histogram","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.self.oneOf.1.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.self.oneOf.1.stat_options.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.self.oneOf.1.stat_options","typeLabel":"object | null"},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.self.oneOf.1.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.self.oneOf.1.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.self.oneOf.1.enabled_stats.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.self.oneOf.1.enabled_stats","typeLabel":"enum\u003cstring>[] | null"}},"additionalProperties":false,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.self.oneOf.1","typeLabel":"object"},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.self.oneOf.2","typeLabel":"null"}],"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.self","typeLabel":"object · object · null"},"properties":{"oneOf":[{"type":"array","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"},"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.properties.oneOf.0","typeLabel":"array"},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"},"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.properties.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.properties","typeLabel":"array | null"}},"additionalProperties":false,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4","typeLabel":"object"},{"type":"null","description":"Configuration for the array item node of this array property.","uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.5","typeLabel":"null"}],"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items","typeLabel":"object · object · object · object · object · null"}},"additionalProperties":false,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2","typeLabel":"object"},{"type":"object","description":"Statistics configuration for a named property of an object node. The property may itself be primitive or non-primitive (recursive). A property must carry at least one configuration field — there is no no-op/inherited variant at the nested level. If a property is listed, it must specify what stats to compute. approx_count_distinct and count_distinct are mutually exclusive — the server rejects any request that includes both in the same enabled_stats array.","required":["path","properties"],"properties":{"properties":{"oneOf":[{"type":"array","items":{"oneOf":[{}],"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.properties.oneOf.0.items.[INDEX]","typeLabel":"any"},"description":"Explicit configurations for named child properties of this object property. Only listed children receive stats — unlisted ones are skipped entirely.","minItems":1,"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.properties.oneOf.0","typeLabel":"any[]"},{"type":"null","description":"Explicit configurations for named child properties of this object property. Only listed children receive stats — unlisted ones are skipped entirely.","minItems":1,"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.properties.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.properties","typeLabel":"any[] | null"},"path":{"type":"string","description":"Name of the child property relative to the parent object node. Must be a valid identifier (alphanumeric and underscores, max 256 chars).","maxLength":256,"pattern":"^[a-zA-Z0-9_]+$","isRequired":true,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.path","typeLabel":"string"},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.enabled_stats","typeLabel":"null"},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.stat_options","typeLabel":"null"},"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.self.oneOf.0.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.self.oneOf.0.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.self.oneOf.0.enabled_stats.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.self.oneOf.0.enabled_stats","typeLabel":"enum\u003cstring>[] | null"},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.self.oneOf.0.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.self.oneOf.0.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.self.oneOf.0.stat_options.oneOf.0.histogram","typeLabel":"object"}},"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.self.oneOf.0.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.self.oneOf.0.stat_options.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.self.oneOf.0.stat_options","typeLabel":"object | null"}},"additionalProperties":false,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.self.oneOf.0","typeLabel":"object"},{"type":"object","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.self.oneOf.1.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.self.oneOf.1.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.self.oneOf.1.stat_options.oneOf.0.histogram","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.self.oneOf.1.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.self.oneOf.1.stat_options.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.self.oneOf.1.stat_options","typeLabel":"object | null"},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.self.oneOf.1.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.self.oneOf.1.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.self.oneOf.1.enabled_stats.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.self.oneOf.1.enabled_stats","typeLabel":"enum\u003cstring>[] | null"}},"additionalProperties":false,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.self.oneOf.1","typeLabel":"object"},{"type":"null","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.self.oneOf.2","typeLabel":"null"}],"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.self","typeLabel":"object · object · null"},"items":{"oneOf":[{"type":"object","description":"Configuration for the array item node of this array property.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.0.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.0.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.0.enabled_stats.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.0.enabled_stats","typeLabel":"enum\u003cstring>[] | null"},"self":{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.0.self","typeLabel":"null"},"properties":{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.0.properties","typeLabel":"null"},"items":{"oneOf":[{"type":"null","description":"Configuration for the array item node.","uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.0.\\items.oneOf.0","typeLabel":"null"},{"type":"null","description":"Configuration for the array item node.","uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.0.\\items.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.0.\\items","typeLabel":"null"},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.0.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.0.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.0.stat_options.oneOf.0.histogram","typeLabel":"object"}},"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.0.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.0.stat_options.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.0.stat_options","typeLabel":"object | null"}},"additionalProperties":false,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.0","typeLabel":"object"},{"type":"object","description":"Configuration for the array item node of this array property.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.1.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.1.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.1.stat_options.oneOf.0.histogram","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.1.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.1.stat_options.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.1.stat_options","typeLabel":"object | null"},"self":{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.1.self","typeLabel":"null"},"properties":{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.1.properties","typeLabel":"null"},"items":{"oneOf":[{"type":"null","description":"Configuration for the array item node.","uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.1.\\items.oneOf.0","typeLabel":"null"},{"type":"null","description":"Configuration for the array item node.","uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.1.\\items.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.1.\\items","typeLabel":"null"},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.1.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.1.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.1.enabled_stats.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.1.enabled_stats","typeLabel":"enum\u003cstring>[] | null"}},"additionalProperties":false,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.1","typeLabel":"object"},{"type":"object","description":"Configuration for the array item node of this array property.","required":["self"],"properties":{"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.self.oneOf.0.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.self.oneOf.0.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.self.oneOf.0.enabled_stats.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.self.oneOf.0.enabled_stats","typeLabel":"enum\u003cstring>[] | null"},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.self.oneOf.0.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.self.oneOf.0.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.self.oneOf.0.stat_options.oneOf.0.histogram","typeLabel":"object"}},"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.self.oneOf.0.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.self.oneOf.0.stat_options.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.self.oneOf.0.stat_options","typeLabel":"object | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.self.oneOf.0","typeLabel":"object"},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.self.oneOf.1.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.self.oneOf.1.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.self.oneOf.1.stat_options.oneOf.0.histogram","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.self.oneOf.1.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.self.oneOf.1.stat_options.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.self.oneOf.1.stat_options","typeLabel":"object | null"},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.self.oneOf.1.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.self.oneOf.1.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.self.oneOf.1.enabled_stats.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.self.oneOf.1.enabled_stats","typeLabel":"enum\u003cstring>[] | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.self.oneOf.1","typeLabel":"object"},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","isRequired":true,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.self.oneOf.2","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.self","typeLabel":"object · object · null"},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.enabled_stats","typeLabel":"null"},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.stat_options","typeLabel":"null"},"properties":{"oneOf":[{"type":"array","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"},"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.properties.oneOf.0","typeLabel":"array"},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"},"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.properties.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.properties","typeLabel":"array | null"},"items":{"oneOf":[{"description":"Configuration for the array item node.","uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.\\items.oneOf.0","typeLabel":"any"},{"type":"null","description":"Configuration for the array item node.","uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.\\items.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.\\items","typeLabel":"any | null"}},"additionalProperties":false,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2","typeLabel":"object"},{"type":"object","description":"Configuration for the array item node of this array property.","required":["properties"],"properties":{"properties":{"oneOf":[{"type":"array","items":{"oneOf":[{}],"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.properties.oneOf.0.items.[INDEX]","typeLabel":"any"},"description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.properties.oneOf.0","typeLabel":"any[]"},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.properties.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.properties","typeLabel":"any[] | null"},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.enabled_stats","typeLabel":"null"},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.stat_options","typeLabel":"null"},"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.self.oneOf.0.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.self.oneOf.0.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.self.oneOf.0.enabled_stats.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.self.oneOf.0.enabled_stats","typeLabel":"enum\u003cstring>[] | null"},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.self.oneOf.0.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.self.oneOf.0.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.self.oneOf.0.stat_options.oneOf.0.histogram","typeLabel":"object"}},"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.self.oneOf.0.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.self.oneOf.0.stat_options.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.self.oneOf.0.stat_options","typeLabel":"object | null"}},"additionalProperties":false,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.self.oneOf.0","typeLabel":"object"},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.self.oneOf.1.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.self.oneOf.1.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.self.oneOf.1.stat_options.oneOf.0.histogram","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.self.oneOf.1.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.self.oneOf.1.stat_options.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.self.oneOf.1.stat_options","typeLabel":"object | null"},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.self.oneOf.1.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.self.oneOf.1.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.self.oneOf.1.enabled_stats.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.self.oneOf.1.enabled_stats","typeLabel":"enum\u003cstring>[] | null"}},"additionalProperties":false,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.self.oneOf.1","typeLabel":"object"},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.self.oneOf.2","typeLabel":"null"}],"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.self","typeLabel":"object · object · null"},"items":{"oneOf":[{"description":"Configuration for the array item node.","uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.\\items.oneOf.0","typeLabel":"any"},{"type":"null","description":"Configuration for the array item node.","uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.\\items.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.\\items","typeLabel":"any | null"}},"additionalProperties":false,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3","typeLabel":"object"},{"type":"object","description":"Configuration for the array item node of this array property.","required":["items"],"properties":{"items":{"oneOf":[{"description":"Configuration for the array item node.","isRequired":true,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.\\items.oneOf.0","typeLabel":"any"},{"type":"null","description":"Configuration for the array item node.","isRequired":true,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.\\items.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.\\items","typeLabel":"any | null"},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.enabled_stats","typeLabel":"null"},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.stat_options","typeLabel":"null"},"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.self.oneOf.0.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.self.oneOf.0.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.self.oneOf.0.enabled_stats.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.self.oneOf.0.enabled_stats","typeLabel":"enum\u003cstring>[] | null"},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.self.oneOf.0.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.self.oneOf.0.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.self.oneOf.0.stat_options.oneOf.0.histogram","typeLabel":"object"}},"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.self.oneOf.0.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.self.oneOf.0.stat_options.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.self.oneOf.0.stat_options","typeLabel":"object | null"}},"additionalProperties":false,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.self.oneOf.0","typeLabel":"object"},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.self.oneOf.1.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.self.oneOf.1.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.self.oneOf.1.stat_options.oneOf.0.histogram","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.self.oneOf.1.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.self.oneOf.1.stat_options.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.self.oneOf.1.stat_options","typeLabel":"object | null"},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.self.oneOf.1.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.self.oneOf.1.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.self.oneOf.1.enabled_stats.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.self.oneOf.1.enabled_stats","typeLabel":"enum\u003cstring>[] | null"}},"additionalProperties":false,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.self.oneOf.1","typeLabel":"object"},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.self.oneOf.2","typeLabel":"null"}],"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.self","typeLabel":"object · object · null"},"properties":{"oneOf":[{"type":"array","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"},"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.properties.oneOf.0","typeLabel":"array"},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"},"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.properties.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.properties","typeLabel":"array | null"}},"additionalProperties":false,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4","typeLabel":"object"},{"type":"null","description":"Configuration for the array item node of this array property.","uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.5","typeLabel":"null"}],"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items","typeLabel":"object · object · object · object · object · null"}},"additionalProperties":false,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3","typeLabel":"object"},{"type":"object","description":"Statistics configuration for a named property of an object node. The property may itself be primitive or non-primitive (recursive). A property must carry at least one configuration field — there is no no-op/inherited variant at the nested level. If a property is listed, it must specify what stats to compute. approx_count_distinct and count_distinct are mutually exclusive — the server rejects any request that includes both in the same enabled_stats array.","required":["path","items"],"properties":{"items":{"oneOf":[{"type":"object","description":"Configuration for the array item node of this array property.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.0.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.0.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.0.enabled_stats.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.0.enabled_stats","typeLabel":"enum\u003cstring>[] | null"},"self":{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.0.self","typeLabel":"null"},"properties":{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.0.properties","typeLabel":"null"},"items":{"oneOf":[{"type":"null","description":"Configuration for the array item node.","uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.0.\\items.oneOf.0","typeLabel":"null"},{"type":"null","description":"Configuration for the array item node.","uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.0.\\items.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.0.\\items","typeLabel":"null"},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.0.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.0.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.0.stat_options.oneOf.0.histogram","typeLabel":"object"}},"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.0.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.0.stat_options.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.0.stat_options","typeLabel":"object | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.0","typeLabel":"object"},{"type":"object","description":"Configuration for the array item node of this array property.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.1.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.1.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.1.stat_options.oneOf.0.histogram","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.1.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.1.stat_options.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.1.stat_options","typeLabel":"object | null"},"self":{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.1.self","typeLabel":"null"},"properties":{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.1.properties","typeLabel":"null"},"items":{"oneOf":[{"type":"null","description":"Configuration for the array item node.","uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.1.\\items.oneOf.0","typeLabel":"null"},{"type":"null","description":"Configuration for the array item node.","uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.1.\\items.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.1.\\items","typeLabel":"null"},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.1.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.1.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.1.enabled_stats.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.1.enabled_stats","typeLabel":"enum\u003cstring>[] | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.1","typeLabel":"object"},{"type":"object","description":"Configuration for the array item node of this array property.","required":["self"],"properties":{"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.self.oneOf.0.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.self.oneOf.0.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.self.oneOf.0.enabled_stats.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.self.oneOf.0.enabled_stats","typeLabel":"enum\u003cstring>[] | null"},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.self.oneOf.0.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.self.oneOf.0.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.self.oneOf.0.stat_options.oneOf.0.histogram","typeLabel":"object"}},"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.self.oneOf.0.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.self.oneOf.0.stat_options.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.self.oneOf.0.stat_options","typeLabel":"object | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.self.oneOf.0","typeLabel":"object"},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.self.oneOf.1.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.self.oneOf.1.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.self.oneOf.1.stat_options.oneOf.0.histogram","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.self.oneOf.1.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.self.oneOf.1.stat_options.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.self.oneOf.1.stat_options","typeLabel":"object | null"},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.self.oneOf.1.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.self.oneOf.1.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.self.oneOf.1.enabled_stats.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.self.oneOf.1.enabled_stats","typeLabel":"enum\u003cstring>[] | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.self.oneOf.1","typeLabel":"object"},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","isRequired":true,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.self.oneOf.2","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.self","typeLabel":"object · object · null"},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.enabled_stats","typeLabel":"null"},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.stat_options","typeLabel":"null"},"properties":{"oneOf":[{"type":"array","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"},"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.properties.oneOf.0","typeLabel":"array"},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"},"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.properties.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.properties","typeLabel":"array | null"},"items":{"oneOf":[{"description":"Configuration for the array item node.","uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.\\items.oneOf.0","typeLabel":"any"},{"type":"null","description":"Configuration for the array item node.","uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.\\items.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.\\items","typeLabel":"any | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2","typeLabel":"object"},{"type":"object","description":"Configuration for the array item node of this array property.","required":["properties"],"properties":{"properties":{"oneOf":[{"type":"array","items":{"oneOf":[{}],"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.properties.oneOf.0.items.[INDEX]","typeLabel":"any"},"description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.properties.oneOf.0","typeLabel":"any[]"},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.properties.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.properties","typeLabel":"any[] | null"},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.enabled_stats","typeLabel":"null"},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.stat_options","typeLabel":"null"},"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.self.oneOf.0.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.self.oneOf.0.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.self.oneOf.0.enabled_stats.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.self.oneOf.0.enabled_stats","typeLabel":"enum\u003cstring>[] | null"},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.self.oneOf.0.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.self.oneOf.0.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.self.oneOf.0.stat_options.oneOf.0.histogram","typeLabel":"object"}},"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.self.oneOf.0.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.self.oneOf.0.stat_options.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.self.oneOf.0.stat_options","typeLabel":"object | null"}},"additionalProperties":false,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.self.oneOf.0","typeLabel":"object"},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.self.oneOf.1.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.self.oneOf.1.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.self.oneOf.1.stat_options.oneOf.0.histogram","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.self.oneOf.1.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.self.oneOf.1.stat_options.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.self.oneOf.1.stat_options","typeLabel":"object | null"},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.self.oneOf.1.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.self.oneOf.1.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.self.oneOf.1.enabled_stats.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.self.oneOf.1.enabled_stats","typeLabel":"enum\u003cstring>[] | null"}},"additionalProperties":false,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.self.oneOf.1","typeLabel":"object"},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.self.oneOf.2","typeLabel":"null"}],"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.self","typeLabel":"object · object · null"},"items":{"oneOf":[{"description":"Configuration for the array item node.","uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.\\items.oneOf.0","typeLabel":"any"},{"type":"null","description":"Configuration for the array item node.","uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.\\items.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.\\items","typeLabel":"any | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3","typeLabel":"object"},{"type":"object","description":"Configuration for the array item node of this array property.","required":["items"],"properties":{"items":{"oneOf":[{"description":"Configuration for the array item node.","isRequired":true,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.\\items.oneOf.0","typeLabel":"any"},{"type":"null","description":"Configuration for the array item node.","isRequired":true,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.\\items.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.\\items","typeLabel":"any | null"},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.enabled_stats","typeLabel":"null"},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.stat_options","typeLabel":"null"},"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.self.oneOf.0.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.self.oneOf.0.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.self.oneOf.0.enabled_stats.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.self.oneOf.0.enabled_stats","typeLabel":"enum\u003cstring>[] | null"},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.self.oneOf.0.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.self.oneOf.0.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.self.oneOf.0.stat_options.oneOf.0.histogram","typeLabel":"object"}},"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.self.oneOf.0.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.self.oneOf.0.stat_options.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.self.oneOf.0.stat_options","typeLabel":"object | null"}},"additionalProperties":false,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.self.oneOf.0","typeLabel":"object"},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.self.oneOf.1.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.self.oneOf.1.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.self.oneOf.1.stat_options.oneOf.0.histogram","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.self.oneOf.1.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.self.oneOf.1.stat_options.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.self.oneOf.1.stat_options","typeLabel":"object | null"},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.self.oneOf.1.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.self.oneOf.1.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.self.oneOf.1.enabled_stats.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.self.oneOf.1.enabled_stats","typeLabel":"enum\u003cstring>[] | null"}},"additionalProperties":false,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.self.oneOf.1","typeLabel":"object"},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.self.oneOf.2","typeLabel":"null"}],"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.self","typeLabel":"object · object · null"},"properties":{"oneOf":[{"type":"array","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"},"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.properties.oneOf.0","typeLabel":"array"},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"},"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.properties.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.properties","typeLabel":"array | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4","typeLabel":"object"},{"type":"null","description":"Configuration for the array item node of this array property.","isRequired":true,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.5","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items","typeLabel":"object · object · object · object · object · null"},"path":{"type":"string","description":"Name of the child property relative to the parent object node. Must be a valid identifier (alphanumeric and underscores, max 256 chars).","maxLength":256,"pattern":"^[a-zA-Z0-9_]+$","isRequired":true,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.path","typeLabel":"string"},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.enabled_stats","typeLabel":"null"},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.stat_options","typeLabel":"null"},"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.self.oneOf.0.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.self.oneOf.0.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.self.oneOf.0.enabled_stats.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.self.oneOf.0.enabled_stats","typeLabel":"enum\u003cstring>[] | null"},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.self.oneOf.0.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.self.oneOf.0.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.self.oneOf.0.stat_options.oneOf.0.histogram","typeLabel":"object"}},"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.self.oneOf.0.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.self.oneOf.0.stat_options.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.self.oneOf.0.stat_options","typeLabel":"object | null"}},"additionalProperties":false,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.self.oneOf.0","typeLabel":"object"},{"type":"object","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.self.oneOf.1.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.self.oneOf.1.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.self.oneOf.1.stat_options.oneOf.0.histogram","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.self.oneOf.1.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.self.oneOf.1.stat_options.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.self.oneOf.1.stat_options","typeLabel":"object | null"},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.self.oneOf.1.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.self.oneOf.1.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.self.oneOf.1.enabled_stats.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.self.oneOf.1.enabled_stats","typeLabel":"enum\u003cstring>[] | null"}},"additionalProperties":false,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.self.oneOf.1","typeLabel":"object"},{"type":"null","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.self.oneOf.2","typeLabel":"null"}],"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.self","typeLabel":"object · object · null"},"properties":{"oneOf":[{"type":"array","description":"Explicit configurations for named child properties of this object property. Only listed children receive stats — unlisted ones are skipped entirely.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"},"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.properties.oneOf.0","typeLabel":"array"},{"type":"null","description":"Explicit configurations for named child properties of this object property. Only listed children receive stats — unlisted ones are skipped entirely.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"},"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.properties.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.properties","typeLabel":"array | null"}},"additionalProperties":false,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4","typeLabel":"object"}],"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX]","typeLabel":"object"},"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0","typeLabel":"object[]"},{"type":"null","description":"Explicit configurations for named child properties of an object field. Only listed children receive stats — unlisted ones are skipped entirely.","minItems":1,"items":{"oneOf":[{"type":"object","description":"Statistics configuration for a named property of an object node. The property may itself be primitive or non-primitive (recursive). A property must carry at least one configuration field — there is no no-op/inherited variant at the nested level. If a property is listed, it must specify what stats to compute. approx_count_distinct and count_distinct are mutually exclusive — the server rejects any request that includes both in the same enabled_stats array.","required":["path","enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"self":{"type":"null","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."},"properties":{"type":"null","description":"Explicit configurations for named child properties of this object property. Only listed children receive stats — unlisted ones are skipped entirely.","minItems":1},"items":{"type":"null","description":"Configuration for the array item node of this array property."},"path":{"type":"string","description":"Name of the child property relative to the parent object node. Must be a valid identifier (alphanumeric and underscores, max 256 chars).","maxLength":256,"pattern":"^[a-zA-Z0-9_]+$"},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Statistics configuration for a named property of an object node. The property may itself be primitive or non-primitive (recursive). A property must carry at least one configuration field — there is no no-op/inherited variant at the nested level. If a property is listed, it must specify what stats to compute. approx_count_distinct and count_distinct are mutually exclusive — the server rejects any request that includes both in the same enabled_stats array.","required":["path","stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"self":{"type":"null","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."},"properties":{"type":"null","description":"Explicit configurations for named child properties of this object property. Only listed children receive stats — unlisted ones are skipped entirely.","minItems":1},"items":{"type":"null","description":"Configuration for the array item node of this array property."},"path":{"type":"string","description":"Name of the child property relative to the parent object node. Must be a valid identifier (alphanumeric and underscores, max 256 chars).","maxLength":256,"pattern":"^[a-zA-Z0-9_]+$"},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"object","description":"Statistics configuration for a named property of an object node. The property may itself be primitive or non-primitive (recursive). A property must carry at least one configuration field — there is no no-op/inherited variant at the nested level. If a property is listed, it must specify what stats to compute. approx_count_distinct and count_distinct are mutually exclusive — the server rejects any request that includes both in the same enabled_stats array.","required":["path","self"],"properties":{"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"null","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."}]},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},"path":{"type":"string","description":"Name of the child property relative to the parent object node. Must be a valid identifier (alphanumeric and underscores, max 256 chars).","maxLength":256,"pattern":"^[a-zA-Z0-9_]+$"},"properties":{"oneOf":[{"type":"array","description":"Explicit configurations for named child properties of this object property. Only listed children receive stats — unlisted ones are skipped entirely.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}},{"type":"null","description":"Explicit configurations for named child properties of this object property. Only listed children receive stats — unlisted ones are skipped entirely.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}}]},"items":{"oneOf":[{"type":"object","description":"Configuration for the array item node of this array property.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"self":{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."},"properties":{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1},"items":{"oneOf":[{"type":"null","description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Configuration for the array item node of this array property.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"self":{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."},"properties":{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1},"items":{"oneOf":[{"type":"null","description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"object","description":"Configuration for the array item node of this array property.","required":["self"],"properties":{"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."}]},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},"properties":{"oneOf":[{"type":"array","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}}]},"items":{"oneOf":[{"description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]}},"additionalProperties":false},{"type":"object","description":"Configuration for the array item node of this array property.","required":["properties"],"properties":{"properties":{"oneOf":[{"type":"array","items":{"oneOf":[{}]},"description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1}]},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."}]},"items":{"oneOf":[{"description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]}},"additionalProperties":false},{"type":"object","description":"Configuration for the array item node of this array property.","required":["items"],"properties":{"items":{"oneOf":[{"description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."}]},"properties":{"oneOf":[{"type":"array","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}}]}},"additionalProperties":false},{"type":"null","description":"Configuration for the array item node of this array property."}]}},"additionalProperties":false},{"type":"object","description":"Statistics configuration for a named property of an object node. The property may itself be primitive or non-primitive (recursive). A property must carry at least one configuration field — there is no no-op/inherited variant at the nested level. If a property is listed, it must specify what stats to compute. approx_count_distinct and count_distinct are mutually exclusive — the server rejects any request that includes both in the same enabled_stats array.","required":["path","properties"],"properties":{"properties":{"oneOf":[{"type":"array","items":{"oneOf":[{}]},"description":"Explicit configurations for named child properties of this object property. Only listed children receive stats — unlisted ones are skipped entirely.","minItems":1},{"type":"null","description":"Explicit configurations for named child properties of this object property. Only listed children receive stats — unlisted ones are skipped entirely.","minItems":1}]},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},"path":{"type":"string","description":"Name of the child property relative to the parent object node. Must be a valid identifier (alphanumeric and underscores, max 256 chars).","maxLength":256,"pattern":"^[a-zA-Z0-9_]+$"},"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"null","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."}]},"items":{"oneOf":[{"type":"object","description":"Configuration for the array item node of this array property.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"self":{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."},"properties":{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1},"items":{"oneOf":[{"type":"null","description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Configuration for the array item node of this array property.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"self":{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."},"properties":{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1},"items":{"oneOf":[{"type":"null","description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"object","description":"Configuration for the array item node of this array property.","required":["self"],"properties":{"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."}]},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},"properties":{"oneOf":[{"type":"array","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}}]},"items":{"oneOf":[{"description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]}},"additionalProperties":false},{"type":"object","description":"Configuration for the array item node of this array property.","required":["properties"],"properties":{"properties":{"oneOf":[{"type":"array","items":{"oneOf":[{}]},"description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1}]},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."}]},"items":{"oneOf":[{"description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]}},"additionalProperties":false},{"type":"object","description":"Configuration for the array item node of this array property.","required":["items"],"properties":{"items":{"oneOf":[{"description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."}]},"properties":{"oneOf":[{"type":"array","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}}]}},"additionalProperties":false},{"type":"null","description":"Configuration for the array item node of this array property."}]}},"additionalProperties":false},{"type":"object","description":"Statistics configuration for a named property of an object node. The property may itself be primitive or non-primitive (recursive). A property must carry at least one configuration field — there is no no-op/inherited variant at the nested level. If a property is listed, it must specify what stats to compute. approx_count_distinct and count_distinct are mutually exclusive — the server rejects any request that includes both in the same enabled_stats array.","required":["path","items"],"properties":{"items":{"oneOf":[{"type":"object","description":"Configuration for the array item node of this array property.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"self":{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."},"properties":{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1},"items":{"oneOf":[{"type":"null","description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Configuration for the array item node of this array property.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"self":{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."},"properties":{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1},"items":{"oneOf":[{"type":"null","description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"object","description":"Configuration for the array item node of this array property.","required":["self"],"properties":{"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."}]},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},"properties":{"oneOf":[{"type":"array","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}}]},"items":{"oneOf":[{"description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]}},"additionalProperties":false},{"type":"object","description":"Configuration for the array item node of this array property.","required":["properties"],"properties":{"properties":{"oneOf":[{"type":"array","items":{"oneOf":[{}]},"description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1}]},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."}]},"items":{"oneOf":[{"description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]}},"additionalProperties":false},{"type":"object","description":"Configuration for the array item node of this array property.","required":["items"],"properties":{"items":{"oneOf":[{"description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."}]},"properties":{"oneOf":[{"type":"array","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}}]}},"additionalProperties":false},{"type":"null","description":"Configuration for the array item node of this array property."}]},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},"path":{"type":"string","description":"Name of the child property relative to the parent object node. Must be a valid identifier (alphanumeric and underscores, max 256 chars).","maxLength":256,"pattern":"^[a-zA-Z0-9_]+$"},"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"null","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."}]},"properties":{"oneOf":[{"type":"array","description":"Explicit configurations for named child properties of this object property. Only listed children receive stats — unlisted ones are skipped entirely.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}},{"type":"null","description":"Explicit configurations for named child properties of this object property. Only listed children receive stats — unlisted ones are skipped entirely.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}}]}},"additionalProperties":false}]},"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].properties","typeLabel":"object[] | null"},"items":{"oneOf":[{"type":"object","description":"Configuration for the array item node.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.0.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.0.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.0.enabled_stats.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.0.enabled_stats","typeLabel":"enum\u003cstring>[] | null"},"self":{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.0.self","typeLabel":"null"},"properties":{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.0.properties","typeLabel":"null"},"items":{"oneOf":[{"type":"null","description":"Configuration for the array item node.","uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.0.\\items.oneOf.0","typeLabel":"null"},{"type":"null","description":"Configuration for the array item node.","uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.0.\\items.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.0.\\items","typeLabel":"null"},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.0.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.0.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.0.stat_options.oneOf.0.histogram","typeLabel":"object"}},"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.0.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.0.stat_options.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.0.stat_options","typeLabel":"object | null"}},"additionalProperties":false,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.0","typeLabel":"object"},{"type":"object","description":"Configuration for the array item node.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.1.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.1.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.1.stat_options.oneOf.0.histogram","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.1.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.1.stat_options.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.1.stat_options","typeLabel":"object | null"},"self":{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.1.self","typeLabel":"null"},"properties":{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.1.properties","typeLabel":"null"},"items":{"oneOf":[{"type":"null","description":"Configuration for the array item node.","uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.1.\\items.oneOf.0","typeLabel":"null"},{"type":"null","description":"Configuration for the array item node.","uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.1.\\items.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.1.\\items","typeLabel":"null"},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.1.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.1.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.1.enabled_stats.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.1.enabled_stats","typeLabel":"enum\u003cstring>[] | null"}},"additionalProperties":false,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.1","typeLabel":"object"},{"type":"object","description":"Configuration for the array item node.","required":["self"],"properties":{"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.self.oneOf.0.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.self.oneOf.0.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.self.oneOf.0.enabled_stats.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.self.oneOf.0.enabled_stats","typeLabel":"enum\u003cstring>[] | null"},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.self.oneOf.0.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.self.oneOf.0.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.self.oneOf.0.stat_options.oneOf.0.histogram","typeLabel":"object"}},"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.self.oneOf.0.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.self.oneOf.0.stat_options.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.self.oneOf.0.stat_options","typeLabel":"object | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.self.oneOf.0","typeLabel":"object"},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.self.oneOf.1.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.self.oneOf.1.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.self.oneOf.1.stat_options.oneOf.0.histogram","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.self.oneOf.1.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.self.oneOf.1.stat_options.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.self.oneOf.1.stat_options","typeLabel":"object | null"},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.self.oneOf.1.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.self.oneOf.1.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.self.oneOf.1.enabled_stats.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.self.oneOf.1.enabled_stats","typeLabel":"enum\u003cstring>[] | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.self.oneOf.1","typeLabel":"object"},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","isRequired":true,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.self.oneOf.2","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.self","typeLabel":"object · object · null"},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.enabled_stats","typeLabel":"null"},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.stat_options","typeLabel":"null"},"properties":{"oneOf":[{"type":"array","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"},"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.properties.oneOf.0","typeLabel":"array"},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"},"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.properties.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.properties","typeLabel":"array | null"},"items":{"oneOf":[{"description":"Configuration for the array item node.","uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.\\items.oneOf.0","typeLabel":"any"},{"type":"null","description":"Configuration for the array item node.","uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.\\items.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.\\items","typeLabel":"any | null"}},"additionalProperties":false,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.2","typeLabel":"object"},{"type":"object","description":"Configuration for the array item node.","required":["properties"],"properties":{"properties":{"oneOf":[{"type":"array","items":{"oneOf":[{}],"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.properties.oneOf.0.items.[INDEX]","typeLabel":"any"},"description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.properties.oneOf.0","typeLabel":"any[]"},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.properties.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.properties","typeLabel":"any[] | null"},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.enabled_stats","typeLabel":"null"},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.stat_options","typeLabel":"null"},"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.self.oneOf.0.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.self.oneOf.0.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.self.oneOf.0.enabled_stats.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.self.oneOf.0.enabled_stats","typeLabel":"enum\u003cstring>[] | null"},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.self.oneOf.0.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.self.oneOf.0.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.self.oneOf.0.stat_options.oneOf.0.histogram","typeLabel":"object"}},"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.self.oneOf.0.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.self.oneOf.0.stat_options.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.self.oneOf.0.stat_options","typeLabel":"object | null"}},"additionalProperties":false,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.self.oneOf.0","typeLabel":"object"},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.self.oneOf.1.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.self.oneOf.1.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.self.oneOf.1.stat_options.oneOf.0.histogram","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.self.oneOf.1.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.self.oneOf.1.stat_options.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.self.oneOf.1.stat_options","typeLabel":"object | null"},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.self.oneOf.1.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.self.oneOf.1.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.self.oneOf.1.enabled_stats.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.self.oneOf.1.enabled_stats","typeLabel":"enum\u003cstring>[] | null"}},"additionalProperties":false,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.self.oneOf.1","typeLabel":"object"},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.self.oneOf.2","typeLabel":"null"}],"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.self","typeLabel":"object · object · null"},"items":{"oneOf":[{"description":"Configuration for the array item node.","uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.\\items.oneOf.0","typeLabel":"any"},{"type":"null","description":"Configuration for the array item node.","uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.\\items.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.\\items","typeLabel":"any | null"}},"additionalProperties":false,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.3","typeLabel":"object"},{"type":"object","description":"Configuration for the array item node.","required":["items"],"properties":{"items":{"oneOf":[{"description":"Configuration for the array item node.","isRequired":true,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.\\items.oneOf.0","typeLabel":"any"},{"type":"null","description":"Configuration for the array item node.","isRequired":true,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.\\items.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.\\items","typeLabel":"any | null"},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.enabled_stats","typeLabel":"null"},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.stat_options","typeLabel":"null"},"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.self.oneOf.0.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.self.oneOf.0.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.self.oneOf.0.enabled_stats.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.self.oneOf.0.enabled_stats","typeLabel":"enum\u003cstring>[] | null"},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.self.oneOf.0.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.self.oneOf.0.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.self.oneOf.0.stat_options.oneOf.0.histogram","typeLabel":"object"}},"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.self.oneOf.0.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.self.oneOf.0.stat_options.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.self.oneOf.0.stat_options","typeLabel":"object | null"}},"additionalProperties":false,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.self.oneOf.0","typeLabel":"object"},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.self.oneOf.1.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.self.oneOf.1.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.self.oneOf.1.stat_options.oneOf.0.histogram","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.self.oneOf.1.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.self.oneOf.1.stat_options.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.self.oneOf.1.stat_options","typeLabel":"object | null"},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.self.oneOf.1.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.self.oneOf.1.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.self.oneOf.1.enabled_stats.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.self.oneOf.1.enabled_stats","typeLabel":"enum\u003cstring>[] | null"}},"additionalProperties":false,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.self.oneOf.1","typeLabel":"object"},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.self.oneOf.2","typeLabel":"null"}],"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.self","typeLabel":"object · object · null"},"properties":{"oneOf":[{"type":"array","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"},"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.properties.oneOf.0","typeLabel":"array"},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"},"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.properties.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.properties","typeLabel":"array | null"}},"additionalProperties":false,"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.4","typeLabel":"object"},{"type":"null","description":"Configuration for the array item node.","uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.5","typeLabel":"null"}],"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX].\\items","typeLabel":"object · object · object · object · object · null"}},"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0.items.[INDEX]","typeLabel":"object"},"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.0","typeLabel":"object[]"},{"type":"null","description":"Per-field overrides for individual dataset columns.","items":{"type":"object","description":"Common stat configuration shared by dataset and Rosetta Stone field configs. Exactly one of three modes must be used (the server rejects invalid combinations):\n\n1. **Primitive field** — provide enabled_stats and/or stat_options at the top level.\n Must not include self, properties, or items.\n\n2. **Non-primitive field** — provide self, properties, and/or items for nested structure.\n Must not include enabled_stats or stat_options at this level;\n use self for node-level stat configuration instead.\n\n3. **No-op / inherit** — leave all stat fields null or absent. The field inherits its\n configuration from the namespace scope or global defaults.\n\n\nThis schema deliberately has no `oneOf` over the three modes. Mode 3 is all five slots null, which matches neither of the other two, so a closed union here would reject it.\nClosing this schema is left to the two that compose it. `additionalProperties: false` here would only see the properties below, so it would reject the `field_name` and `attribute_name` its siblings contribute; `DatasetFieldConfig` and `RosettaStoneFieldConfig` use `unevaluatedProperties: false`, which sees the whole composition.","required":["field_name"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]},"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive field node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Statistics for the non-primitive field node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"null","description":"Statistics for the non-primitive field node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."}]},"properties":{"oneOf":[{"type":"array","description":"Explicit configurations for named child properties of an object field. Only listed children receive stats — unlisted ones are skipped entirely.","minItems":1,"items":{"oneOf":[{"type":"object","description":"Statistics configuration for a named property of an object node. The property may itself be primitive or non-primitive (recursive). A property must carry at least one configuration field — there is no no-op/inherited variant at the nested level. If a property is listed, it must specify what stats to compute. approx_count_distinct and count_distinct are mutually exclusive — the server rejects any request that includes both in the same enabled_stats array.","required":["path","enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"self":{"type":"null","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."},"properties":{"type":"null","description":"Explicit configurations for named child properties of this object property. Only listed children receive stats — unlisted ones are skipped entirely.","minItems":1},"items":{"type":"null","description":"Configuration for the array item node of this array property."},"path":{"type":"string","description":"Name of the child property relative to the parent object node. Must be a valid identifier (alphanumeric and underscores, max 256 chars).","maxLength":256,"pattern":"^[a-zA-Z0-9_]+$"},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Statistics configuration for a named property of an object node. The property may itself be primitive or non-primitive (recursive). A property must carry at least one configuration field — there is no no-op/inherited variant at the nested level. If a property is listed, it must specify what stats to compute. approx_count_distinct and count_distinct are mutually exclusive — the server rejects any request that includes both in the same enabled_stats array.","required":["path","stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"self":{"type":"null","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."},"properties":{"type":"null","description":"Explicit configurations for named child properties of this object property. Only listed children receive stats — unlisted ones are skipped entirely.","minItems":1},"items":{"type":"null","description":"Configuration for the array item node of this array property."},"path":{"type":"string","description":"Name of the child property relative to the parent object node. Must be a valid identifier (alphanumeric and underscores, max 256 chars).","maxLength":256,"pattern":"^[a-zA-Z0-9_]+$"},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"object","description":"Statistics configuration for a named property of an object node. The property may itself be primitive or non-primitive (recursive). A property must carry at least one configuration field — there is no no-op/inherited variant at the nested level. If a property is listed, it must specify what stats to compute. approx_count_distinct and count_distinct are mutually exclusive — the server rejects any request that includes both in the same enabled_stats array.","required":["path","self"],"properties":{"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"null","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."}]},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},"path":{"type":"string","description":"Name of the child property relative to the parent object node. Must be a valid identifier (alphanumeric and underscores, max 256 chars).","maxLength":256,"pattern":"^[a-zA-Z0-9_]+$"},"properties":{"oneOf":[{"type":"array","description":"Explicit configurations for named child properties of this object property. Only listed children receive stats — unlisted ones are skipped entirely.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}},{"type":"null","description":"Explicit configurations for named child properties of this object property. Only listed children receive stats — unlisted ones are skipped entirely.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}}]},"items":{"oneOf":[{"type":"object","description":"Configuration for the array item node of this array property.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"self":{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."},"properties":{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1},"items":{"oneOf":[{"type":"null","description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Configuration for the array item node of this array property.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"self":{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."},"properties":{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1},"items":{"oneOf":[{"type":"null","description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"object","description":"Configuration for the array item node of this array property.","required":["self"],"properties":{"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."}]},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},"properties":{"oneOf":[{"type":"array","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}}]},"items":{"oneOf":[{"description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]}},"additionalProperties":false},{"type":"object","description":"Configuration for the array item node of this array property.","required":["properties"],"properties":{"properties":{"oneOf":[{"type":"array","items":{"oneOf":[{}]},"description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1}]},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."}]},"items":{"oneOf":[{"description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]}},"additionalProperties":false},{"type":"object","description":"Configuration for the array item node of this array property.","required":["items"],"properties":{"items":{"oneOf":[{"description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."}]},"properties":{"oneOf":[{"type":"array","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}}]}},"additionalProperties":false},{"type":"null","description":"Configuration for the array item node of this array property."}]}},"additionalProperties":false},{"type":"object","description":"Statistics configuration for a named property of an object node. The property may itself be primitive or non-primitive (recursive). A property must carry at least one configuration field — there is no no-op/inherited variant at the nested level. If a property is listed, it must specify what stats to compute. approx_count_distinct and count_distinct are mutually exclusive — the server rejects any request that includes both in the same enabled_stats array.","required":["path","properties"],"properties":{"properties":{"oneOf":[{"type":"array","items":{"oneOf":[{}]},"description":"Explicit configurations for named child properties of this object property. Only listed children receive stats — unlisted ones are skipped entirely.","minItems":1},{"type":"null","description":"Explicit configurations for named child properties of this object property. Only listed children receive stats — unlisted ones are skipped entirely.","minItems":1}]},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},"path":{"type":"string","description":"Name of the child property relative to the parent object node. Must be a valid identifier (alphanumeric and underscores, max 256 chars).","maxLength":256,"pattern":"^[a-zA-Z0-9_]+$"},"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"null","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."}]},"items":{"oneOf":[{"type":"object","description":"Configuration for the array item node of this array property.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"self":{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."},"properties":{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1},"items":{"oneOf":[{"type":"null","description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Configuration for the array item node of this array property.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"self":{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."},"properties":{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1},"items":{"oneOf":[{"type":"null","description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"object","description":"Configuration for the array item node of this array property.","required":["self"],"properties":{"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."}]},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},"properties":{"oneOf":[{"type":"array","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}}]},"items":{"oneOf":[{"description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]}},"additionalProperties":false},{"type":"object","description":"Configuration for the array item node of this array property.","required":["properties"],"properties":{"properties":{"oneOf":[{"type":"array","items":{"oneOf":[{}]},"description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1}]},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."}]},"items":{"oneOf":[{"description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]}},"additionalProperties":false},{"type":"object","description":"Configuration for the array item node of this array property.","required":["items"],"properties":{"items":{"oneOf":[{"description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."}]},"properties":{"oneOf":[{"type":"array","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}}]}},"additionalProperties":false},{"type":"null","description":"Configuration for the array item node of this array property."}]}},"additionalProperties":false},{"type":"object","description":"Statistics configuration for a named property of an object node. The property may itself be primitive or non-primitive (recursive). A property must carry at least one configuration field — there is no no-op/inherited variant at the nested level. If a property is listed, it must specify what stats to compute. approx_count_distinct and count_distinct are mutually exclusive — the server rejects any request that includes both in the same enabled_stats array.","required":["path","items"],"properties":{"items":{"oneOf":[{"type":"object","description":"Configuration for the array item node of this array property.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"self":{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."},"properties":{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1},"items":{"oneOf":[{"type":"null","description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Configuration for the array item node of this array property.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"self":{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."},"properties":{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1},"items":{"oneOf":[{"type":"null","description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"object","description":"Configuration for the array item node of this array property.","required":["self"],"properties":{"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."}]},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},"properties":{"oneOf":[{"type":"array","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}}]},"items":{"oneOf":[{"description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]}},"additionalProperties":false},{"type":"object","description":"Configuration for the array item node of this array property.","required":["properties"],"properties":{"properties":{"oneOf":[{"type":"array","items":{"oneOf":[{}]},"description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1}]},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."}]},"items":{"oneOf":[{"description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]}},"additionalProperties":false},{"type":"object","description":"Configuration for the array item node of this array property.","required":["items"],"properties":{"items":{"oneOf":[{"description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."}]},"properties":{"oneOf":[{"type":"array","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}}]}},"additionalProperties":false},{"type":"null","description":"Configuration for the array item node of this array property."}]},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},"path":{"type":"string","description":"Name of the child property relative to the parent object node. Must be a valid identifier (alphanumeric and underscores, max 256 chars).","maxLength":256,"pattern":"^[a-zA-Z0-9_]+$"},"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"null","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."}]},"properties":{"oneOf":[{"type":"array","description":"Explicit configurations for named child properties of this object property. Only listed children receive stats — unlisted ones are skipped entirely.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}},{"type":"null","description":"Explicit configurations for named child properties of this object property. Only listed children receive stats — unlisted ones are skipped entirely.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}}]}},"additionalProperties":false}]}},{"type":"null","description":"Explicit configurations for named child properties of an object field. Only listed children receive stats — unlisted ones are skipped entirely.","minItems":1,"items":{"oneOf":[{"type":"object","description":"Statistics configuration for a named property of an object node. The property may itself be primitive or non-primitive (recursive). A property must carry at least one configuration field — there is no no-op/inherited variant at the nested level. If a property is listed, it must specify what stats to compute. approx_count_distinct and count_distinct are mutually exclusive — the server rejects any request that includes both in the same enabled_stats array.","required":["path","enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"self":{"type":"null","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."},"properties":{"type":"null","description":"Explicit configurations for named child properties of this object property. Only listed children receive stats — unlisted ones are skipped entirely.","minItems":1},"items":{"type":"null","description":"Configuration for the array item node of this array property."},"path":{"type":"string","description":"Name of the child property relative to the parent object node. Must be a valid identifier (alphanumeric and underscores, max 256 chars).","maxLength":256,"pattern":"^[a-zA-Z0-9_]+$"},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Statistics configuration for a named property of an object node. The property may itself be primitive or non-primitive (recursive). A property must carry at least one configuration field — there is no no-op/inherited variant at the nested level. If a property is listed, it must specify what stats to compute. approx_count_distinct and count_distinct are mutually exclusive — the server rejects any request that includes both in the same enabled_stats array.","required":["path","stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"self":{"type":"null","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."},"properties":{"type":"null","description":"Explicit configurations for named child properties of this object property. Only listed children receive stats — unlisted ones are skipped entirely.","minItems":1},"items":{"type":"null","description":"Configuration for the array item node of this array property."},"path":{"type":"string","description":"Name of the child property relative to the parent object node. Must be a valid identifier (alphanumeric and underscores, max 256 chars).","maxLength":256,"pattern":"^[a-zA-Z0-9_]+$"},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"object","description":"Statistics configuration for a named property of an object node. The property may itself be primitive or non-primitive (recursive). A property must carry at least one configuration field — there is no no-op/inherited variant at the nested level. If a property is listed, it must specify what stats to compute. approx_count_distinct and count_distinct are mutually exclusive — the server rejects any request that includes both in the same enabled_stats array.","required":["path","self"],"properties":{"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"null","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."}]},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},"path":{"type":"string","description":"Name of the child property relative to the parent object node. Must be a valid identifier (alphanumeric and underscores, max 256 chars).","maxLength":256,"pattern":"^[a-zA-Z0-9_]+$"},"properties":{"oneOf":[{"type":"array","description":"Explicit configurations for named child properties of this object property. Only listed children receive stats — unlisted ones are skipped entirely.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}},{"type":"null","description":"Explicit configurations for named child properties of this object property. Only listed children receive stats — unlisted ones are skipped entirely.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}}]},"items":{"oneOf":[{"type":"object","description":"Configuration for the array item node of this array property.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"self":{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."},"properties":{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1},"items":{"oneOf":[{"type":"null","description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Configuration for the array item node of this array property.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"self":{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."},"properties":{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1},"items":{"oneOf":[{"type":"null","description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"object","description":"Configuration for the array item node of this array property.","required":["self"],"properties":{"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."}]},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},"properties":{"oneOf":[{"type":"array","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}}]},"items":{"oneOf":[{"description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]}},"additionalProperties":false},{"type":"object","description":"Configuration for the array item node of this array property.","required":["properties"],"properties":{"properties":{"oneOf":[{"type":"array","items":{"oneOf":[{}]},"description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1}]},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."}]},"items":{"oneOf":[{"description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]}},"additionalProperties":false},{"type":"object","description":"Configuration for the array item node of this array property.","required":["items"],"properties":{"items":{"oneOf":[{"description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."}]},"properties":{"oneOf":[{"type":"array","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}}]}},"additionalProperties":false},{"type":"null","description":"Configuration for the array item node of this array property."}]}},"additionalProperties":false},{"type":"object","description":"Statistics configuration for a named property of an object node. The property may itself be primitive or non-primitive (recursive). A property must carry at least one configuration field — there is no no-op/inherited variant at the nested level. If a property is listed, it must specify what stats to compute. approx_count_distinct and count_distinct are mutually exclusive — the server rejects any request that includes both in the same enabled_stats array.","required":["path","properties"],"properties":{"properties":{"oneOf":[{"type":"array","items":{"oneOf":[{}]},"description":"Explicit configurations for named child properties of this object property. Only listed children receive stats — unlisted ones are skipped entirely.","minItems":1},{"type":"null","description":"Explicit configurations for named child properties of this object property. Only listed children receive stats — unlisted ones are skipped entirely.","minItems":1}]},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},"path":{"type":"string","description":"Name of the child property relative to the parent object node. Must be a valid identifier (alphanumeric and underscores, max 256 chars).","maxLength":256,"pattern":"^[a-zA-Z0-9_]+$"},"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"null","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."}]},"items":{"oneOf":[{"type":"object","description":"Configuration for the array item node of this array property.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"self":{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."},"properties":{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1},"items":{"oneOf":[{"type":"null","description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Configuration for the array item node of this array property.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"self":{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."},"properties":{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1},"items":{"oneOf":[{"type":"null","description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"object","description":"Configuration for the array item node of this array property.","required":["self"],"properties":{"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."}]},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},"properties":{"oneOf":[{"type":"array","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}}]},"items":{"oneOf":[{"description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]}},"additionalProperties":false},{"type":"object","description":"Configuration for the array item node of this array property.","required":["properties"],"properties":{"properties":{"oneOf":[{"type":"array","items":{"oneOf":[{}]},"description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1}]},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."}]},"items":{"oneOf":[{"description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]}},"additionalProperties":false},{"type":"object","description":"Configuration for the array item node of this array property.","required":["items"],"properties":{"items":{"oneOf":[{"description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."}]},"properties":{"oneOf":[{"type":"array","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}}]}},"additionalProperties":false},{"type":"null","description":"Configuration for the array item node of this array property."}]}},"additionalProperties":false},{"type":"object","description":"Statistics configuration for a named property of an object node. The property may itself be primitive or non-primitive (recursive). A property must carry at least one configuration field — there is no no-op/inherited variant at the nested level. If a property is listed, it must specify what stats to compute. approx_count_distinct and count_distinct are mutually exclusive — the server rejects any request that includes both in the same enabled_stats array.","required":["path","items"],"properties":{"items":{"oneOf":[{"type":"object","description":"Configuration for the array item node of this array property.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"self":{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."},"properties":{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1},"items":{"oneOf":[{"type":"null","description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Configuration for the array item node of this array property.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"self":{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."},"properties":{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1},"items":{"oneOf":[{"type":"null","description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"object","description":"Configuration for the array item node of this array property.","required":["self"],"properties":{"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."}]},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},"properties":{"oneOf":[{"type":"array","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}}]},"items":{"oneOf":[{"description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]}},"additionalProperties":false},{"type":"object","description":"Configuration for the array item node of this array property.","required":["properties"],"properties":{"properties":{"oneOf":[{"type":"array","items":{"oneOf":[{}]},"description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1}]},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."}]},"items":{"oneOf":[{"description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]}},"additionalProperties":false},{"type":"object","description":"Configuration for the array item node of this array property.","required":["items"],"properties":{"items":{"oneOf":[{"description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."}]},"properties":{"oneOf":[{"type":"array","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}}]}},"additionalProperties":false},{"type":"null","description":"Configuration for the array item node of this array property."}]},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},"path":{"type":"string","description":"Name of the child property relative to the parent object node. Must be a valid identifier (alphanumeric and underscores, max 256 chars).","maxLength":256,"pattern":"^[a-zA-Z0-9_]+$"},"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"null","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."}]},"properties":{"oneOf":[{"type":"array","description":"Explicit configurations for named child properties of this object property. Only listed children receive stats — unlisted ones are skipped entirely.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}},{"type":"null","description":"Explicit configurations for named child properties of this object property. Only listed children receive stats — unlisted ones are skipped entirely.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}}]}},"additionalProperties":false}]}}]},"items":{"oneOf":[{"type":"object","description":"Configuration for the array item node.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"self":{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."},"properties":{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1},"items":{"oneOf":[{"type":"null","description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Configuration for the array item node.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"self":{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."},"properties":{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1},"items":{"oneOf":[{"type":"null","description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"object","description":"Configuration for the array item node.","required":["self"],"properties":{"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."}]},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},"properties":{"oneOf":[{"type":"array","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}}]},"items":{"oneOf":[{"description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]}},"additionalProperties":false},{"type":"object","description":"Configuration for the array item node.","required":["properties"],"properties":{"properties":{"oneOf":[{"type":"array","items":{"oneOf":[{}]},"description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1}]},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."}]},"items":{"oneOf":[{"description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]}},"additionalProperties":false},{"type":"object","description":"Configuration for the array item node.","required":["items"],"properties":{"items":{"oneOf":[{"description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."}]},"properties":{"oneOf":[{"type":"array","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}}]}},"additionalProperties":false},{"type":"null","description":"Configuration for the array item node."}]},"field_name":{"type":"string","description":"The column name as defined in the dataset schema. Must be a valid identifier (alphanumeric and underscores, max 256 chars).","maxLength":256,"pattern":"^[a-zA-Z0-9_]+$"}}},"uniqueKey":"configuration.dataset.oneOf.0.fields.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.dataset.oneOf.0.fields","typeLabel":"object[] | null"}},"additionalProperties":false,"uniqueKey":"configuration.dataset.oneOf.0","typeLabel":"object"},{"type":"object","description":"Configuration for dataset schema columns. Use 'scope' to override defaults for all dataset fields, or to disable the namespace entirely via enabled_stats: []. Use 'fields' for per-field overrides. Null when the config does not touch this namespace.","required":["fields"],"properties":{"fields":{"oneOf":[{"type":"array","items":{"type":"object","description":"Common stat configuration shared by dataset and Rosetta Stone field configs. Exactly one of three modes must be used (the server rejects invalid combinations):\n\n1. **Primitive field** — provide enabled_stats and/or stat_options at the top level.\n Must not include self, properties, or items.\n\n2. **Non-primitive field** — provide self, properties, and/or items for nested structure.\n Must not include enabled_stats or stat_options at this level;\n use self for node-level stat configuration instead.\n\n3. **No-op / inherit** — leave all stat fields null or absent. The field inherits its\n configuration from the namespace scope or global defaults.\n\n\nThis schema deliberately has no `oneOf` over the three modes. Mode 3 is all five slots null, which matches neither of the other two, so a closed union here would reject it.\nClosing this schema is left to the two that compose it. `additionalProperties: false` here would only see the properties below, so it would reject the `field_name` and `attribute_name` its siblings contribute; `DatasetFieldConfig` and `RosettaStoneFieldConfig` use `unevaluatedProperties: false`, which sees the whole composition.","required":["field_name"],"properties":{"field_name":{"type":"string","description":"The column name as defined in the dataset schema. Must be a valid identifier (alphanumeric and underscores, max 256 chars).","maxLength":256,"pattern":"^[a-zA-Z0-9_]+$","isRequired":true,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].field_name","typeLabel":"string"},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].enabled_stats.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].enabled_stats","typeLabel":"enum\u003cstring>[] | null"},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].stat_options.oneOf.0.histogram","typeLabel":"object"}},"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].stat_options.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].stat_options","typeLabel":"object | null"},"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive field node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].self.oneOf.0.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].self.oneOf.0.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].self.oneOf.0.enabled_stats.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].self.oneOf.0.enabled_stats","typeLabel":"enum\u003cstring>[] | null"},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].self.oneOf.0.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].self.oneOf.0.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].self.oneOf.0.stat_options.oneOf.0.histogram","typeLabel":"object"}},"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].self.oneOf.0.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].self.oneOf.0.stat_options.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].self.oneOf.0.stat_options","typeLabel":"object | null"}},"additionalProperties":false,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].self.oneOf.0","typeLabel":"object"},{"type":"object","description":"Statistics for the non-primitive field node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].self.oneOf.1.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].self.oneOf.1.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].self.oneOf.1.stat_options.oneOf.0.histogram","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].self.oneOf.1.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].self.oneOf.1.stat_options.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].self.oneOf.1.stat_options","typeLabel":"object | null"},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].self.oneOf.1.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].self.oneOf.1.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].self.oneOf.1.enabled_stats.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].self.oneOf.1.enabled_stats","typeLabel":"enum\u003cstring>[] | null"}},"additionalProperties":false,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].self.oneOf.1","typeLabel":"object"},{"type":"null","description":"Statistics for the non-primitive field node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].self.oneOf.2","typeLabel":"null"}],"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].self","typeLabel":"object · object · null"},"properties":{"oneOf":[{"type":"array","description":"Explicit configurations for named child properties of an object field. Only listed children receive stats — unlisted ones are skipped entirely.","minItems":1,"items":{"oneOf":[{"type":"object","description":"Statistics configuration for a named property of an object node. The property may itself be primitive or non-primitive (recursive). A property must carry at least one configuration field — there is no no-op/inherited variant at the nested level. If a property is listed, it must specify what stats to compute. approx_count_distinct and count_distinct are mutually exclusive — the server rejects any request that includes both in the same enabled_stats array.","required":["path","enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.0.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.0.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.0.enabled_stats.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.0.enabled_stats","typeLabel":"enum\u003cstring>[] | null"},"path":{"type":"string","description":"Name of the child property relative to the parent object node. Must be a valid identifier (alphanumeric and underscores, max 256 chars).","maxLength":256,"pattern":"^[a-zA-Z0-9_]+$","isRequired":true,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.0.path","typeLabel":"string"},"self":{"type":"null","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.0.self","typeLabel":"null"},"properties":{"type":"null","description":"Explicit configurations for named child properties of this object property. Only listed children receive stats — unlisted ones are skipped entirely.","minItems":1,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.0.properties","typeLabel":"null"},"items":{"type":"null","description":"Configuration for the array item node of this array property.","uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.0.\\items","typeLabel":"null"},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.0.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.0.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.0.stat_options.oneOf.0.histogram","typeLabel":"object"}},"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.0.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.0.stat_options.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.0.stat_options","typeLabel":"object | null"}},"additionalProperties":false,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.0","typeLabel":"object"},{"type":"object","description":"Statistics configuration for a named property of an object node. The property may itself be primitive or non-primitive (recursive). A property must carry at least one configuration field — there is no no-op/inherited variant at the nested level. If a property is listed, it must specify what stats to compute. approx_count_distinct and count_distinct are mutually exclusive — the server rejects any request that includes both in the same enabled_stats array.","required":["path","stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.1.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.1.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.1.stat_options.oneOf.0.histogram","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.1.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.1.stat_options.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.1.stat_options","typeLabel":"object | null"},"path":{"type":"string","description":"Name of the child property relative to the parent object node. Must be a valid identifier (alphanumeric and underscores, max 256 chars).","maxLength":256,"pattern":"^[a-zA-Z0-9_]+$","isRequired":true,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.1.path","typeLabel":"string"},"self":{"type":"null","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.1.self","typeLabel":"null"},"properties":{"type":"null","description":"Explicit configurations for named child properties of this object property. Only listed children receive stats — unlisted ones are skipped entirely.","minItems":1,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.1.properties","typeLabel":"null"},"items":{"type":"null","description":"Configuration for the array item node of this array property.","uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.1.\\items","typeLabel":"null"},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.1.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.1.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.1.enabled_stats.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.1.enabled_stats","typeLabel":"enum\u003cstring>[] | null"}},"additionalProperties":false,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.1","typeLabel":"object"},{"type":"object","description":"Statistics configuration for a named property of an object node. The property may itself be primitive or non-primitive (recursive). A property must carry at least one configuration field — there is no no-op/inherited variant at the nested level. If a property is listed, it must specify what stats to compute. approx_count_distinct and count_distinct are mutually exclusive — the server rejects any request that includes both in the same enabled_stats array.","required":["path","self"],"properties":{"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.self.oneOf.0.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.self.oneOf.0.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.self.oneOf.0.enabled_stats.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.self.oneOf.0.enabled_stats","typeLabel":"enum\u003cstring>[] | null"},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.self.oneOf.0.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.self.oneOf.0.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.self.oneOf.0.stat_options.oneOf.0.histogram","typeLabel":"object"}},"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.self.oneOf.0.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.self.oneOf.0.stat_options.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.self.oneOf.0.stat_options","typeLabel":"object | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.self.oneOf.0","typeLabel":"object"},{"type":"object","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.self.oneOf.1.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.self.oneOf.1.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.self.oneOf.1.stat_options.oneOf.0.histogram","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.self.oneOf.1.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.self.oneOf.1.stat_options.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.self.oneOf.1.stat_options","typeLabel":"object | null"},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.self.oneOf.1.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.self.oneOf.1.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.self.oneOf.1.enabled_stats.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.self.oneOf.1.enabled_stats","typeLabel":"enum\u003cstring>[] | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.self.oneOf.1","typeLabel":"object"},{"type":"null","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","isRequired":true,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.self.oneOf.2","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.self","typeLabel":"object · object · null"},"path":{"type":"string","description":"Name of the child property relative to the parent object node. Must be a valid identifier (alphanumeric and underscores, max 256 chars).","maxLength":256,"pattern":"^[a-zA-Z0-9_]+$","isRequired":true,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.path","typeLabel":"string"},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.enabled_stats","typeLabel":"null"},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.stat_options","typeLabel":"null"},"properties":{"oneOf":[{"type":"array","description":"Explicit configurations for named child properties of this object property. Only listed children receive stats — unlisted ones are skipped entirely.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"},"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.properties.oneOf.0","typeLabel":"array"},{"type":"null","description":"Explicit configurations for named child properties of this object property. Only listed children receive stats — unlisted ones are skipped entirely.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"},"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.properties.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.properties","typeLabel":"array | null"},"items":{"oneOf":[{"type":"object","description":"Configuration for the array item node of this array property.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.0.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.0.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.0.enabled_stats.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.0.enabled_stats","typeLabel":"enum\u003cstring>[] | null"},"self":{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.0.self","typeLabel":"null"},"properties":{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.0.properties","typeLabel":"null"},"items":{"oneOf":[{"type":"null","description":"Configuration for the array item node.","uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.0.\\items.oneOf.0","typeLabel":"null"},{"type":"null","description":"Configuration for the array item node.","uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.0.\\items.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.0.\\items","typeLabel":"null"},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.0.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.0.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.0.stat_options.oneOf.0.histogram","typeLabel":"object"}},"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.0.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.0.stat_options.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.0.stat_options","typeLabel":"object | null"}},"additionalProperties":false,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.0","typeLabel":"object"},{"type":"object","description":"Configuration for the array item node of this array property.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.1.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.1.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.1.stat_options.oneOf.0.histogram","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.1.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.1.stat_options.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.1.stat_options","typeLabel":"object | null"},"self":{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.1.self","typeLabel":"null"},"properties":{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.1.properties","typeLabel":"null"},"items":{"oneOf":[{"type":"null","description":"Configuration for the array item node.","uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.1.\\items.oneOf.0","typeLabel":"null"},{"type":"null","description":"Configuration for the array item node.","uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.1.\\items.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.1.\\items","typeLabel":"null"},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.1.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.1.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.1.enabled_stats.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.1.enabled_stats","typeLabel":"enum\u003cstring>[] | null"}},"additionalProperties":false,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.1","typeLabel":"object"},{"type":"object","description":"Configuration for the array item node of this array property.","required":["self"],"properties":{"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.self.oneOf.0.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.self.oneOf.0.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.self.oneOf.0.enabled_stats.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.self.oneOf.0.enabled_stats","typeLabel":"enum\u003cstring>[] | null"},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.self.oneOf.0.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.self.oneOf.0.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.self.oneOf.0.stat_options.oneOf.0.histogram","typeLabel":"object"}},"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.self.oneOf.0.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.self.oneOf.0.stat_options.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.self.oneOf.0.stat_options","typeLabel":"object | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.self.oneOf.0","typeLabel":"object"},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.self.oneOf.1.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.self.oneOf.1.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.self.oneOf.1.stat_options.oneOf.0.histogram","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.self.oneOf.1.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.self.oneOf.1.stat_options.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.self.oneOf.1.stat_options","typeLabel":"object | null"},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.self.oneOf.1.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.self.oneOf.1.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.self.oneOf.1.enabled_stats.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.self.oneOf.1.enabled_stats","typeLabel":"enum\u003cstring>[] | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.self.oneOf.1","typeLabel":"object"},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","isRequired":true,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.self.oneOf.2","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.self","typeLabel":"object · object · null"},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.enabled_stats","typeLabel":"null"},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.stat_options","typeLabel":"null"},"properties":{"oneOf":[{"type":"array","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"},"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.properties.oneOf.0","typeLabel":"array"},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"},"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.properties.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.properties","typeLabel":"array | null"},"items":{"oneOf":[{"description":"Configuration for the array item node.","uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.\\items.oneOf.0","typeLabel":"any"},{"type":"null","description":"Configuration for the array item node.","uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.\\items.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.\\items","typeLabel":"any | null"}},"additionalProperties":false,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2","typeLabel":"object"},{"type":"object","description":"Configuration for the array item node of this array property.","required":["properties"],"properties":{"properties":{"oneOf":[{"type":"array","items":{"oneOf":[{}],"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.properties.oneOf.0.items.[INDEX]","typeLabel":"any"},"description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.properties.oneOf.0","typeLabel":"any[]"},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.properties.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.properties","typeLabel":"any[] | null"},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.enabled_stats","typeLabel":"null"},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.stat_options","typeLabel":"null"},"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.self.oneOf.0.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.self.oneOf.0.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.self.oneOf.0.enabled_stats.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.self.oneOf.0.enabled_stats","typeLabel":"enum\u003cstring>[] | null"},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.self.oneOf.0.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.self.oneOf.0.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.self.oneOf.0.stat_options.oneOf.0.histogram","typeLabel":"object"}},"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.self.oneOf.0.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.self.oneOf.0.stat_options.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.self.oneOf.0.stat_options","typeLabel":"object | null"}},"additionalProperties":false,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.self.oneOf.0","typeLabel":"object"},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.self.oneOf.1.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.self.oneOf.1.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.self.oneOf.1.stat_options.oneOf.0.histogram","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.self.oneOf.1.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.self.oneOf.1.stat_options.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.self.oneOf.1.stat_options","typeLabel":"object | null"},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.self.oneOf.1.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.self.oneOf.1.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.self.oneOf.1.enabled_stats.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.self.oneOf.1.enabled_stats","typeLabel":"enum\u003cstring>[] | null"}},"additionalProperties":false,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.self.oneOf.1","typeLabel":"object"},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.self.oneOf.2","typeLabel":"null"}],"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.self","typeLabel":"object · object · null"},"items":{"oneOf":[{"description":"Configuration for the array item node.","uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.\\items.oneOf.0","typeLabel":"any"},{"type":"null","description":"Configuration for the array item node.","uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.\\items.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.\\items","typeLabel":"any | null"}},"additionalProperties":false,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3","typeLabel":"object"},{"type":"object","description":"Configuration for the array item node of this array property.","required":["items"],"properties":{"items":{"oneOf":[{"description":"Configuration for the array item node.","isRequired":true,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.\\items.oneOf.0","typeLabel":"any"},{"type":"null","description":"Configuration for the array item node.","isRequired":true,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.\\items.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.\\items","typeLabel":"any | null"},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.enabled_stats","typeLabel":"null"},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.stat_options","typeLabel":"null"},"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.self.oneOf.0.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.self.oneOf.0.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.self.oneOf.0.enabled_stats.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.self.oneOf.0.enabled_stats","typeLabel":"enum\u003cstring>[] | null"},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.self.oneOf.0.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.self.oneOf.0.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.self.oneOf.0.stat_options.oneOf.0.histogram","typeLabel":"object"}},"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.self.oneOf.0.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.self.oneOf.0.stat_options.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.self.oneOf.0.stat_options","typeLabel":"object | null"}},"additionalProperties":false,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.self.oneOf.0","typeLabel":"object"},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.self.oneOf.1.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.self.oneOf.1.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.self.oneOf.1.stat_options.oneOf.0.histogram","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.self.oneOf.1.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.self.oneOf.1.stat_options.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.self.oneOf.1.stat_options","typeLabel":"object | null"},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.self.oneOf.1.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.self.oneOf.1.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.self.oneOf.1.enabled_stats.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.self.oneOf.1.enabled_stats","typeLabel":"enum\u003cstring>[] | null"}},"additionalProperties":false,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.self.oneOf.1","typeLabel":"object"},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.self.oneOf.2","typeLabel":"null"}],"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.self","typeLabel":"object · object · null"},"properties":{"oneOf":[{"type":"array","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"},"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.properties.oneOf.0","typeLabel":"array"},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"},"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.properties.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.properties","typeLabel":"array | null"}},"additionalProperties":false,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4","typeLabel":"object"},{"type":"null","description":"Configuration for the array item node of this array property.","uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.5","typeLabel":"null"}],"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items","typeLabel":"object · object · object · object · object · null"}},"additionalProperties":false,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2","typeLabel":"object"},{"type":"object","description":"Statistics configuration for a named property of an object node. The property may itself be primitive or non-primitive (recursive). A property must carry at least one configuration field — there is no no-op/inherited variant at the nested level. If a property is listed, it must specify what stats to compute. approx_count_distinct and count_distinct are mutually exclusive — the server rejects any request that includes both in the same enabled_stats array.","required":["path","properties"],"properties":{"properties":{"oneOf":[{"type":"array","items":{"oneOf":[{}],"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.properties.oneOf.0.items.[INDEX]","typeLabel":"any"},"description":"Explicit configurations for named child properties of this object property. Only listed children receive stats — unlisted ones are skipped entirely.","minItems":1,"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.properties.oneOf.0","typeLabel":"any[]"},{"type":"null","description":"Explicit configurations for named child properties of this object property. Only listed children receive stats — unlisted ones are skipped entirely.","minItems":1,"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.properties.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.properties","typeLabel":"any[] | null"},"path":{"type":"string","description":"Name of the child property relative to the parent object node. Must be a valid identifier (alphanumeric and underscores, max 256 chars).","maxLength":256,"pattern":"^[a-zA-Z0-9_]+$","isRequired":true,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.path","typeLabel":"string"},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.enabled_stats","typeLabel":"null"},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.stat_options","typeLabel":"null"},"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.self.oneOf.0.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.self.oneOf.0.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.self.oneOf.0.enabled_stats.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.self.oneOf.0.enabled_stats","typeLabel":"enum\u003cstring>[] | null"},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.self.oneOf.0.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.self.oneOf.0.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.self.oneOf.0.stat_options.oneOf.0.histogram","typeLabel":"object"}},"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.self.oneOf.0.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.self.oneOf.0.stat_options.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.self.oneOf.0.stat_options","typeLabel":"object | null"}},"additionalProperties":false,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.self.oneOf.0","typeLabel":"object"},{"type":"object","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.self.oneOf.1.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.self.oneOf.1.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.self.oneOf.1.stat_options.oneOf.0.histogram","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.self.oneOf.1.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.self.oneOf.1.stat_options.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.self.oneOf.1.stat_options","typeLabel":"object | null"},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.self.oneOf.1.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.self.oneOf.1.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.self.oneOf.1.enabled_stats.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.self.oneOf.1.enabled_stats","typeLabel":"enum\u003cstring>[] | null"}},"additionalProperties":false,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.self.oneOf.1","typeLabel":"object"},{"type":"null","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.self.oneOf.2","typeLabel":"null"}],"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.self","typeLabel":"object · object · null"},"items":{"oneOf":[{"type":"object","description":"Configuration for the array item node of this array property.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.0.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.0.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.0.enabled_stats.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.0.enabled_stats","typeLabel":"enum\u003cstring>[] | null"},"self":{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.0.self","typeLabel":"null"},"properties":{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.0.properties","typeLabel":"null"},"items":{"oneOf":[{"type":"null","description":"Configuration for the array item node.","uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.0.\\items.oneOf.0","typeLabel":"null"},{"type":"null","description":"Configuration for the array item node.","uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.0.\\items.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.0.\\items","typeLabel":"null"},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.0.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.0.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.0.stat_options.oneOf.0.histogram","typeLabel":"object"}},"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.0.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.0.stat_options.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.0.stat_options","typeLabel":"object | null"}},"additionalProperties":false,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.0","typeLabel":"object"},{"type":"object","description":"Configuration for the array item node of this array property.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.1.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.1.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.1.stat_options.oneOf.0.histogram","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.1.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.1.stat_options.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.1.stat_options","typeLabel":"object | null"},"self":{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.1.self","typeLabel":"null"},"properties":{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.1.properties","typeLabel":"null"},"items":{"oneOf":[{"type":"null","description":"Configuration for the array item node.","uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.1.\\items.oneOf.0","typeLabel":"null"},{"type":"null","description":"Configuration for the array item node.","uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.1.\\items.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.1.\\items","typeLabel":"null"},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.1.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.1.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.1.enabled_stats.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.1.enabled_stats","typeLabel":"enum\u003cstring>[] | null"}},"additionalProperties":false,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.1","typeLabel":"object"},{"type":"object","description":"Configuration for the array item node of this array property.","required":["self"],"properties":{"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.self.oneOf.0.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.self.oneOf.0.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.self.oneOf.0.enabled_stats.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.self.oneOf.0.enabled_stats","typeLabel":"enum\u003cstring>[] | null"},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.self.oneOf.0.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.self.oneOf.0.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.self.oneOf.0.stat_options.oneOf.0.histogram","typeLabel":"object"}},"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.self.oneOf.0.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.self.oneOf.0.stat_options.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.self.oneOf.0.stat_options","typeLabel":"object | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.self.oneOf.0","typeLabel":"object"},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.self.oneOf.1.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.self.oneOf.1.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.self.oneOf.1.stat_options.oneOf.0.histogram","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.self.oneOf.1.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.self.oneOf.1.stat_options.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.self.oneOf.1.stat_options","typeLabel":"object | null"},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.self.oneOf.1.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.self.oneOf.1.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.self.oneOf.1.enabled_stats.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.self.oneOf.1.enabled_stats","typeLabel":"enum\u003cstring>[] | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.self.oneOf.1","typeLabel":"object"},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","isRequired":true,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.self.oneOf.2","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.self","typeLabel":"object · object · null"},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.enabled_stats","typeLabel":"null"},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.stat_options","typeLabel":"null"},"properties":{"oneOf":[{"type":"array","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"},"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.properties.oneOf.0","typeLabel":"array"},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"},"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.properties.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.properties","typeLabel":"array | null"},"items":{"oneOf":[{"description":"Configuration for the array item node.","uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.\\items.oneOf.0","typeLabel":"any"},{"type":"null","description":"Configuration for the array item node.","uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.\\items.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.\\items","typeLabel":"any | null"}},"additionalProperties":false,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2","typeLabel":"object"},{"type":"object","description":"Configuration for the array item node of this array property.","required":["properties"],"properties":{"properties":{"oneOf":[{"type":"array","items":{"oneOf":[{}],"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.properties.oneOf.0.items.[INDEX]","typeLabel":"any"},"description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.properties.oneOf.0","typeLabel":"any[]"},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.properties.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.properties","typeLabel":"any[] | null"},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.enabled_stats","typeLabel":"null"},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.stat_options","typeLabel":"null"},"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.self.oneOf.0.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.self.oneOf.0.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.self.oneOf.0.enabled_stats.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.self.oneOf.0.enabled_stats","typeLabel":"enum\u003cstring>[] | null"},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.self.oneOf.0.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.self.oneOf.0.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.self.oneOf.0.stat_options.oneOf.0.histogram","typeLabel":"object"}},"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.self.oneOf.0.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.self.oneOf.0.stat_options.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.self.oneOf.0.stat_options","typeLabel":"object | null"}},"additionalProperties":false,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.self.oneOf.0","typeLabel":"object"},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.self.oneOf.1.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.self.oneOf.1.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.self.oneOf.1.stat_options.oneOf.0.histogram","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.self.oneOf.1.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.self.oneOf.1.stat_options.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.self.oneOf.1.stat_options","typeLabel":"object | null"},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.self.oneOf.1.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.self.oneOf.1.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.self.oneOf.1.enabled_stats.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.self.oneOf.1.enabled_stats","typeLabel":"enum\u003cstring>[] | null"}},"additionalProperties":false,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.self.oneOf.1","typeLabel":"object"},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.self.oneOf.2","typeLabel":"null"}],"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.self","typeLabel":"object · object · null"},"items":{"oneOf":[{"description":"Configuration for the array item node.","uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.\\items.oneOf.0","typeLabel":"any"},{"type":"null","description":"Configuration for the array item node.","uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.\\items.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.\\items","typeLabel":"any | null"}},"additionalProperties":false,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3","typeLabel":"object"},{"type":"object","description":"Configuration for the array item node of this array property.","required":["items"],"properties":{"items":{"oneOf":[{"description":"Configuration for the array item node.","isRequired":true,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.\\items.oneOf.0","typeLabel":"any"},{"type":"null","description":"Configuration for the array item node.","isRequired":true,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.\\items.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.\\items","typeLabel":"any | null"},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.enabled_stats","typeLabel":"null"},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.stat_options","typeLabel":"null"},"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.self.oneOf.0.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.self.oneOf.0.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.self.oneOf.0.enabled_stats.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.self.oneOf.0.enabled_stats","typeLabel":"enum\u003cstring>[] | null"},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.self.oneOf.0.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.self.oneOf.0.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.self.oneOf.0.stat_options.oneOf.0.histogram","typeLabel":"object"}},"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.self.oneOf.0.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.self.oneOf.0.stat_options.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.self.oneOf.0.stat_options","typeLabel":"object | null"}},"additionalProperties":false,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.self.oneOf.0","typeLabel":"object"},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.self.oneOf.1.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.self.oneOf.1.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.self.oneOf.1.stat_options.oneOf.0.histogram","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.self.oneOf.1.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.self.oneOf.1.stat_options.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.self.oneOf.1.stat_options","typeLabel":"object | null"},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.self.oneOf.1.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.self.oneOf.1.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.self.oneOf.1.enabled_stats.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.self.oneOf.1.enabled_stats","typeLabel":"enum\u003cstring>[] | null"}},"additionalProperties":false,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.self.oneOf.1","typeLabel":"object"},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.self.oneOf.2","typeLabel":"null"}],"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.self","typeLabel":"object · object · null"},"properties":{"oneOf":[{"type":"array","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"},"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.properties.oneOf.0","typeLabel":"array"},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"},"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.properties.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.properties","typeLabel":"array | null"}},"additionalProperties":false,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4","typeLabel":"object"},{"type":"null","description":"Configuration for the array item node of this array property.","uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.5","typeLabel":"null"}],"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items","typeLabel":"object · object · object · object · object · null"}},"additionalProperties":false,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3","typeLabel":"object"},{"type":"object","description":"Statistics configuration for a named property of an object node. The property may itself be primitive or non-primitive (recursive). A property must carry at least one configuration field — there is no no-op/inherited variant at the nested level. If a property is listed, it must specify what stats to compute. approx_count_distinct and count_distinct are mutually exclusive — the server rejects any request that includes both in the same enabled_stats array.","required":["path","items"],"properties":{"items":{"oneOf":[{"type":"object","description":"Configuration for the array item node of this array property.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.0.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.0.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.0.enabled_stats.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.0.enabled_stats","typeLabel":"enum\u003cstring>[] | null"},"self":{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.0.self","typeLabel":"null"},"properties":{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.0.properties","typeLabel":"null"},"items":{"oneOf":[{"type":"null","description":"Configuration for the array item node.","uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.0.\\items.oneOf.0","typeLabel":"null"},{"type":"null","description":"Configuration for the array item node.","uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.0.\\items.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.0.\\items","typeLabel":"null"},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.0.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.0.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.0.stat_options.oneOf.0.histogram","typeLabel":"object"}},"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.0.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.0.stat_options.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.0.stat_options","typeLabel":"object | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.0","typeLabel":"object"},{"type":"object","description":"Configuration for the array item node of this array property.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.1.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.1.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.1.stat_options.oneOf.0.histogram","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.1.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.1.stat_options.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.1.stat_options","typeLabel":"object | null"},"self":{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.1.self","typeLabel":"null"},"properties":{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.1.properties","typeLabel":"null"},"items":{"oneOf":[{"type":"null","description":"Configuration for the array item node.","uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.1.\\items.oneOf.0","typeLabel":"null"},{"type":"null","description":"Configuration for the array item node.","uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.1.\\items.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.1.\\items","typeLabel":"null"},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.1.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.1.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.1.enabled_stats.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.1.enabled_stats","typeLabel":"enum\u003cstring>[] | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.1","typeLabel":"object"},{"type":"object","description":"Configuration for the array item node of this array property.","required":["self"],"properties":{"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.self.oneOf.0.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.self.oneOf.0.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.self.oneOf.0.enabled_stats.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.self.oneOf.0.enabled_stats","typeLabel":"enum\u003cstring>[] | null"},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.self.oneOf.0.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.self.oneOf.0.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.self.oneOf.0.stat_options.oneOf.0.histogram","typeLabel":"object"}},"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.self.oneOf.0.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.self.oneOf.0.stat_options.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.self.oneOf.0.stat_options","typeLabel":"object | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.self.oneOf.0","typeLabel":"object"},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.self.oneOf.1.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.self.oneOf.1.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.self.oneOf.1.stat_options.oneOf.0.histogram","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.self.oneOf.1.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.self.oneOf.1.stat_options.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.self.oneOf.1.stat_options","typeLabel":"object | null"},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.self.oneOf.1.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.self.oneOf.1.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.self.oneOf.1.enabled_stats.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.self.oneOf.1.enabled_stats","typeLabel":"enum\u003cstring>[] | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.self.oneOf.1","typeLabel":"object"},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","isRequired":true,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.self.oneOf.2","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.self","typeLabel":"object · object · null"},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.enabled_stats","typeLabel":"null"},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.stat_options","typeLabel":"null"},"properties":{"oneOf":[{"type":"array","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"},"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.properties.oneOf.0","typeLabel":"array"},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"},"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.properties.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.properties","typeLabel":"array | null"},"items":{"oneOf":[{"description":"Configuration for the array item node.","uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.\\items.oneOf.0","typeLabel":"any"},{"type":"null","description":"Configuration for the array item node.","uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.\\items.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.\\items","typeLabel":"any | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2","typeLabel":"object"},{"type":"object","description":"Configuration for the array item node of this array property.","required":["properties"],"properties":{"properties":{"oneOf":[{"type":"array","items":{"oneOf":[{}],"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.properties.oneOf.0.items.[INDEX]","typeLabel":"any"},"description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.properties.oneOf.0","typeLabel":"any[]"},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.properties.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.properties","typeLabel":"any[] | null"},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.enabled_stats","typeLabel":"null"},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.stat_options","typeLabel":"null"},"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.self.oneOf.0.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.self.oneOf.0.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.self.oneOf.0.enabled_stats.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.self.oneOf.0.enabled_stats","typeLabel":"enum\u003cstring>[] | null"},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.self.oneOf.0.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.self.oneOf.0.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.self.oneOf.0.stat_options.oneOf.0.histogram","typeLabel":"object"}},"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.self.oneOf.0.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.self.oneOf.0.stat_options.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.self.oneOf.0.stat_options","typeLabel":"object | null"}},"additionalProperties":false,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.self.oneOf.0","typeLabel":"object"},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.self.oneOf.1.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.self.oneOf.1.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.self.oneOf.1.stat_options.oneOf.0.histogram","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.self.oneOf.1.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.self.oneOf.1.stat_options.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.self.oneOf.1.stat_options","typeLabel":"object | null"},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.self.oneOf.1.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.self.oneOf.1.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.self.oneOf.1.enabled_stats.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.self.oneOf.1.enabled_stats","typeLabel":"enum\u003cstring>[] | null"}},"additionalProperties":false,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.self.oneOf.1","typeLabel":"object"},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.self.oneOf.2","typeLabel":"null"}],"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.self","typeLabel":"object · object · null"},"items":{"oneOf":[{"description":"Configuration for the array item node.","uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.\\items.oneOf.0","typeLabel":"any"},{"type":"null","description":"Configuration for the array item node.","uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.\\items.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.\\items","typeLabel":"any | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3","typeLabel":"object"},{"type":"object","description":"Configuration for the array item node of this array property.","required":["items"],"properties":{"items":{"oneOf":[{"description":"Configuration for the array item node.","isRequired":true,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.\\items.oneOf.0","typeLabel":"any"},{"type":"null","description":"Configuration for the array item node.","isRequired":true,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.\\items.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.\\items","typeLabel":"any | null"},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.enabled_stats","typeLabel":"null"},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.stat_options","typeLabel":"null"},"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.self.oneOf.0.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.self.oneOf.0.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.self.oneOf.0.enabled_stats.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.self.oneOf.0.enabled_stats","typeLabel":"enum\u003cstring>[] | null"},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.self.oneOf.0.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.self.oneOf.0.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.self.oneOf.0.stat_options.oneOf.0.histogram","typeLabel":"object"}},"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.self.oneOf.0.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.self.oneOf.0.stat_options.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.self.oneOf.0.stat_options","typeLabel":"object | null"}},"additionalProperties":false,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.self.oneOf.0","typeLabel":"object"},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.self.oneOf.1.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.self.oneOf.1.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.self.oneOf.1.stat_options.oneOf.0.histogram","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.self.oneOf.1.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.self.oneOf.1.stat_options.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.self.oneOf.1.stat_options","typeLabel":"object | null"},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.self.oneOf.1.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.self.oneOf.1.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.self.oneOf.1.enabled_stats.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.self.oneOf.1.enabled_stats","typeLabel":"enum\u003cstring>[] | null"}},"additionalProperties":false,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.self.oneOf.1","typeLabel":"object"},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.self.oneOf.2","typeLabel":"null"}],"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.self","typeLabel":"object · object · null"},"properties":{"oneOf":[{"type":"array","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"},"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.properties.oneOf.0","typeLabel":"array"},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"},"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.properties.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.properties","typeLabel":"array | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4","typeLabel":"object"},{"type":"null","description":"Configuration for the array item node of this array property.","isRequired":true,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.5","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items","typeLabel":"object · object · object · object · object · null"},"path":{"type":"string","description":"Name of the child property relative to the parent object node. Must be a valid identifier (alphanumeric and underscores, max 256 chars).","maxLength":256,"pattern":"^[a-zA-Z0-9_]+$","isRequired":true,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.path","typeLabel":"string"},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.enabled_stats","typeLabel":"null"},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.stat_options","typeLabel":"null"},"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.self.oneOf.0.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.self.oneOf.0.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.self.oneOf.0.enabled_stats.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.self.oneOf.0.enabled_stats","typeLabel":"enum\u003cstring>[] | null"},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.self.oneOf.0.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.self.oneOf.0.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.self.oneOf.0.stat_options.oneOf.0.histogram","typeLabel":"object"}},"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.self.oneOf.0.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.self.oneOf.0.stat_options.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.self.oneOf.0.stat_options","typeLabel":"object | null"}},"additionalProperties":false,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.self.oneOf.0","typeLabel":"object"},{"type":"object","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.self.oneOf.1.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.self.oneOf.1.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.self.oneOf.1.stat_options.oneOf.0.histogram","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.self.oneOf.1.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.self.oneOf.1.stat_options.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.self.oneOf.1.stat_options","typeLabel":"object | null"},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.self.oneOf.1.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.self.oneOf.1.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.self.oneOf.1.enabled_stats.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.self.oneOf.1.enabled_stats","typeLabel":"enum\u003cstring>[] | null"}},"additionalProperties":false,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.self.oneOf.1","typeLabel":"object"},{"type":"null","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.self.oneOf.2","typeLabel":"null"}],"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.self","typeLabel":"object · object · null"},"properties":{"oneOf":[{"type":"array","description":"Explicit configurations for named child properties of this object property. Only listed children receive stats — unlisted ones are skipped entirely.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"},"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.properties.oneOf.0","typeLabel":"array"},{"type":"null","description":"Explicit configurations for named child properties of this object property. Only listed children receive stats — unlisted ones are skipped entirely.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"},"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.properties.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.properties","typeLabel":"array | null"}},"additionalProperties":false,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4","typeLabel":"object"}],"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX]","typeLabel":"object"},"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0","typeLabel":"object[]"},{"type":"null","description":"Explicit configurations for named child properties of an object field. Only listed children receive stats — unlisted ones are skipped entirely.","minItems":1,"items":{"oneOf":[{"type":"object","description":"Statistics configuration for a named property of an object node. The property may itself be primitive or non-primitive (recursive). A property must carry at least one configuration field — there is no no-op/inherited variant at the nested level. If a property is listed, it must specify what stats to compute. approx_count_distinct and count_distinct are mutually exclusive — the server rejects any request that includes both in the same enabled_stats array.","required":["path","enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"self":{"type":"null","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."},"properties":{"type":"null","description":"Explicit configurations for named child properties of this object property. Only listed children receive stats — unlisted ones are skipped entirely.","minItems":1},"items":{"type":"null","description":"Configuration for the array item node of this array property."},"path":{"type":"string","description":"Name of the child property relative to the parent object node. Must be a valid identifier (alphanumeric and underscores, max 256 chars).","maxLength":256,"pattern":"^[a-zA-Z0-9_]+$"},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Statistics configuration for a named property of an object node. The property may itself be primitive or non-primitive (recursive). A property must carry at least one configuration field — there is no no-op/inherited variant at the nested level. If a property is listed, it must specify what stats to compute. approx_count_distinct and count_distinct are mutually exclusive — the server rejects any request that includes both in the same enabled_stats array.","required":["path","stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"self":{"type":"null","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."},"properties":{"type":"null","description":"Explicit configurations for named child properties of this object property. Only listed children receive stats — unlisted ones are skipped entirely.","minItems":1},"items":{"type":"null","description":"Configuration for the array item node of this array property."},"path":{"type":"string","description":"Name of the child property relative to the parent object node. Must be a valid identifier (alphanumeric and underscores, max 256 chars).","maxLength":256,"pattern":"^[a-zA-Z0-9_]+$"},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"object","description":"Statistics configuration for a named property of an object node. The property may itself be primitive or non-primitive (recursive). A property must carry at least one configuration field — there is no no-op/inherited variant at the nested level. If a property is listed, it must specify what stats to compute. approx_count_distinct and count_distinct are mutually exclusive — the server rejects any request that includes both in the same enabled_stats array.","required":["path","self"],"properties":{"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"null","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."}]},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},"path":{"type":"string","description":"Name of the child property relative to the parent object node. Must be a valid identifier (alphanumeric and underscores, max 256 chars).","maxLength":256,"pattern":"^[a-zA-Z0-9_]+$"},"properties":{"oneOf":[{"type":"array","description":"Explicit configurations for named child properties of this object property. Only listed children receive stats — unlisted ones are skipped entirely.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}},{"type":"null","description":"Explicit configurations for named child properties of this object property. Only listed children receive stats — unlisted ones are skipped entirely.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}}]},"items":{"oneOf":[{"type":"object","description":"Configuration for the array item node of this array property.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"self":{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."},"properties":{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1},"items":{"oneOf":[{"type":"null","description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Configuration for the array item node of this array property.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"self":{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."},"properties":{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1},"items":{"oneOf":[{"type":"null","description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"object","description":"Configuration for the array item node of this array property.","required":["self"],"properties":{"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."}]},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},"properties":{"oneOf":[{"type":"array","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}}]},"items":{"oneOf":[{"description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]}},"additionalProperties":false},{"type":"object","description":"Configuration for the array item node of this array property.","required":["properties"],"properties":{"properties":{"oneOf":[{"type":"array","items":{"oneOf":[{}]},"description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1}]},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."}]},"items":{"oneOf":[{"description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]}},"additionalProperties":false},{"type":"object","description":"Configuration for the array item node of this array property.","required":["items"],"properties":{"items":{"oneOf":[{"description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."}]},"properties":{"oneOf":[{"type":"array","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}}]}},"additionalProperties":false},{"type":"null","description":"Configuration for the array item node of this array property."}]}},"additionalProperties":false},{"type":"object","description":"Statistics configuration for a named property of an object node. The property may itself be primitive or non-primitive (recursive). A property must carry at least one configuration field — there is no no-op/inherited variant at the nested level. If a property is listed, it must specify what stats to compute. approx_count_distinct and count_distinct are mutually exclusive — the server rejects any request that includes both in the same enabled_stats array.","required":["path","properties"],"properties":{"properties":{"oneOf":[{"type":"array","items":{"oneOf":[{}]},"description":"Explicit configurations for named child properties of this object property. Only listed children receive stats — unlisted ones are skipped entirely.","minItems":1},{"type":"null","description":"Explicit configurations for named child properties of this object property. Only listed children receive stats — unlisted ones are skipped entirely.","minItems":1}]},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},"path":{"type":"string","description":"Name of the child property relative to the parent object node. Must be a valid identifier (alphanumeric and underscores, max 256 chars).","maxLength":256,"pattern":"^[a-zA-Z0-9_]+$"},"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"null","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."}]},"items":{"oneOf":[{"type":"object","description":"Configuration for the array item node of this array property.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"self":{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."},"properties":{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1},"items":{"oneOf":[{"type":"null","description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Configuration for the array item node of this array property.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"self":{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."},"properties":{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1},"items":{"oneOf":[{"type":"null","description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"object","description":"Configuration for the array item node of this array property.","required":["self"],"properties":{"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."}]},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},"properties":{"oneOf":[{"type":"array","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}}]},"items":{"oneOf":[{"description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]}},"additionalProperties":false},{"type":"object","description":"Configuration for the array item node of this array property.","required":["properties"],"properties":{"properties":{"oneOf":[{"type":"array","items":{"oneOf":[{}]},"description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1}]},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."}]},"items":{"oneOf":[{"description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]}},"additionalProperties":false},{"type":"object","description":"Configuration for the array item node of this array property.","required":["items"],"properties":{"items":{"oneOf":[{"description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."}]},"properties":{"oneOf":[{"type":"array","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}}]}},"additionalProperties":false},{"type":"null","description":"Configuration for the array item node of this array property."}]}},"additionalProperties":false},{"type":"object","description":"Statistics configuration for a named property of an object node. The property may itself be primitive or non-primitive (recursive). A property must carry at least one configuration field — there is no no-op/inherited variant at the nested level. If a property is listed, it must specify what stats to compute. approx_count_distinct and count_distinct are mutually exclusive — the server rejects any request that includes both in the same enabled_stats array.","required":["path","items"],"properties":{"items":{"oneOf":[{"type":"object","description":"Configuration for the array item node of this array property.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"self":{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."},"properties":{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1},"items":{"oneOf":[{"type":"null","description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Configuration for the array item node of this array property.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"self":{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."},"properties":{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1},"items":{"oneOf":[{"type":"null","description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"object","description":"Configuration for the array item node of this array property.","required":["self"],"properties":{"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."}]},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},"properties":{"oneOf":[{"type":"array","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}}]},"items":{"oneOf":[{"description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]}},"additionalProperties":false},{"type":"object","description":"Configuration for the array item node of this array property.","required":["properties"],"properties":{"properties":{"oneOf":[{"type":"array","items":{"oneOf":[{}]},"description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1}]},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."}]},"items":{"oneOf":[{"description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]}},"additionalProperties":false},{"type":"object","description":"Configuration for the array item node of this array property.","required":["items"],"properties":{"items":{"oneOf":[{"description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."}]},"properties":{"oneOf":[{"type":"array","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}}]}},"additionalProperties":false},{"type":"null","description":"Configuration for the array item node of this array property."}]},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},"path":{"type":"string","description":"Name of the child property relative to the parent object node. Must be a valid identifier (alphanumeric and underscores, max 256 chars).","maxLength":256,"pattern":"^[a-zA-Z0-9_]+$"},"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"null","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."}]},"properties":{"oneOf":[{"type":"array","description":"Explicit configurations for named child properties of this object property. Only listed children receive stats — unlisted ones are skipped entirely.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}},{"type":"null","description":"Explicit configurations for named child properties of this object property. Only listed children receive stats — unlisted ones are skipped entirely.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}}]}},"additionalProperties":false}]},"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].properties","typeLabel":"object[] | null"},"items":{"oneOf":[{"type":"object","description":"Configuration for the array item node.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.0.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.0.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.0.enabled_stats.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.0.enabled_stats","typeLabel":"enum\u003cstring>[] | null"},"self":{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.0.self","typeLabel":"null"},"properties":{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.0.properties","typeLabel":"null"},"items":{"oneOf":[{"type":"null","description":"Configuration for the array item node.","uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.0.\\items.oneOf.0","typeLabel":"null"},{"type":"null","description":"Configuration for the array item node.","uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.0.\\items.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.0.\\items","typeLabel":"null"},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.0.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.0.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.0.stat_options.oneOf.0.histogram","typeLabel":"object"}},"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.0.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.0.stat_options.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.0.stat_options","typeLabel":"object | null"}},"additionalProperties":false,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.0","typeLabel":"object"},{"type":"object","description":"Configuration for the array item node.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.1.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.1.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.1.stat_options.oneOf.0.histogram","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.1.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.1.stat_options.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.1.stat_options","typeLabel":"object | null"},"self":{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.1.self","typeLabel":"null"},"properties":{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.1.properties","typeLabel":"null"},"items":{"oneOf":[{"type":"null","description":"Configuration for the array item node.","uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.1.\\items.oneOf.0","typeLabel":"null"},{"type":"null","description":"Configuration for the array item node.","uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.1.\\items.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.1.\\items","typeLabel":"null"},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.1.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.1.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.1.enabled_stats.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.1.enabled_stats","typeLabel":"enum\u003cstring>[] | null"}},"additionalProperties":false,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.1","typeLabel":"object"},{"type":"object","description":"Configuration for the array item node.","required":["self"],"properties":{"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.self.oneOf.0.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.self.oneOf.0.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.self.oneOf.0.enabled_stats.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.self.oneOf.0.enabled_stats","typeLabel":"enum\u003cstring>[] | null"},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.self.oneOf.0.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.self.oneOf.0.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.self.oneOf.0.stat_options.oneOf.0.histogram","typeLabel":"object"}},"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.self.oneOf.0.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.self.oneOf.0.stat_options.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.self.oneOf.0.stat_options","typeLabel":"object | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.self.oneOf.0","typeLabel":"object"},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.self.oneOf.1.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.self.oneOf.1.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.self.oneOf.1.stat_options.oneOf.0.histogram","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.self.oneOf.1.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.self.oneOf.1.stat_options.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.self.oneOf.1.stat_options","typeLabel":"object | null"},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.self.oneOf.1.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.self.oneOf.1.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.self.oneOf.1.enabled_stats.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.self.oneOf.1.enabled_stats","typeLabel":"enum\u003cstring>[] | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.self.oneOf.1","typeLabel":"object"},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","isRequired":true,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.self.oneOf.2","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.self","typeLabel":"object · object · null"},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.enabled_stats","typeLabel":"null"},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.stat_options","typeLabel":"null"},"properties":{"oneOf":[{"type":"array","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"},"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.properties.oneOf.0","typeLabel":"array"},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"},"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.properties.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.properties","typeLabel":"array | null"},"items":{"oneOf":[{"description":"Configuration for the array item node.","uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.\\items.oneOf.0","typeLabel":"any"},{"type":"null","description":"Configuration for the array item node.","uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.\\items.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.\\items","typeLabel":"any | null"}},"additionalProperties":false,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.2","typeLabel":"object"},{"type":"object","description":"Configuration for the array item node.","required":["properties"],"properties":{"properties":{"oneOf":[{"type":"array","items":{"oneOf":[{}],"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.properties.oneOf.0.items.[INDEX]","typeLabel":"any"},"description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.properties.oneOf.0","typeLabel":"any[]"},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.properties.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.properties","typeLabel":"any[] | null"},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.enabled_stats","typeLabel":"null"},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.stat_options","typeLabel":"null"},"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.self.oneOf.0.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.self.oneOf.0.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.self.oneOf.0.enabled_stats.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.self.oneOf.0.enabled_stats","typeLabel":"enum\u003cstring>[] | null"},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.self.oneOf.0.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.self.oneOf.0.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.self.oneOf.0.stat_options.oneOf.0.histogram","typeLabel":"object"}},"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.self.oneOf.0.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.self.oneOf.0.stat_options.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.self.oneOf.0.stat_options","typeLabel":"object | null"}},"additionalProperties":false,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.self.oneOf.0","typeLabel":"object"},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.self.oneOf.1.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.self.oneOf.1.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.self.oneOf.1.stat_options.oneOf.0.histogram","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.self.oneOf.1.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.self.oneOf.1.stat_options.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.self.oneOf.1.stat_options","typeLabel":"object | null"},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.self.oneOf.1.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.self.oneOf.1.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.self.oneOf.1.enabled_stats.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.self.oneOf.1.enabled_stats","typeLabel":"enum\u003cstring>[] | null"}},"additionalProperties":false,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.self.oneOf.1","typeLabel":"object"},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.self.oneOf.2","typeLabel":"null"}],"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.self","typeLabel":"object · object · null"},"items":{"oneOf":[{"description":"Configuration for the array item node.","uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.\\items.oneOf.0","typeLabel":"any"},{"type":"null","description":"Configuration for the array item node.","uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.\\items.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.\\items","typeLabel":"any | null"}},"additionalProperties":false,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.3","typeLabel":"object"},{"type":"object","description":"Configuration for the array item node.","required":["items"],"properties":{"items":{"oneOf":[{"description":"Configuration for the array item node.","isRequired":true,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.\\items.oneOf.0","typeLabel":"any"},{"type":"null","description":"Configuration for the array item node.","isRequired":true,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.\\items.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.\\items","typeLabel":"any | null"},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.enabled_stats","typeLabel":"null"},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.stat_options","typeLabel":"null"},"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.self.oneOf.0.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.self.oneOf.0.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.self.oneOf.0.enabled_stats.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.self.oneOf.0.enabled_stats","typeLabel":"enum\u003cstring>[] | null"},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.self.oneOf.0.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.self.oneOf.0.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.self.oneOf.0.stat_options.oneOf.0.histogram","typeLabel":"object"}},"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.self.oneOf.0.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.self.oneOf.0.stat_options.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.self.oneOf.0.stat_options","typeLabel":"object | null"}},"additionalProperties":false,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.self.oneOf.0","typeLabel":"object"},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.self.oneOf.1.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.self.oneOf.1.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.self.oneOf.1.stat_options.oneOf.0.histogram","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.self.oneOf.1.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.self.oneOf.1.stat_options.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.self.oneOf.1.stat_options","typeLabel":"object | null"},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.self.oneOf.1.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.self.oneOf.1.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.self.oneOf.1.enabled_stats.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.self.oneOf.1.enabled_stats","typeLabel":"enum\u003cstring>[] | null"}},"additionalProperties":false,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.self.oneOf.1","typeLabel":"object"},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.self.oneOf.2","typeLabel":"null"}],"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.self","typeLabel":"object · object · null"},"properties":{"oneOf":[{"type":"array","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"},"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.properties.oneOf.0","typeLabel":"array"},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"},"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.properties.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.properties","typeLabel":"array | null"}},"additionalProperties":false,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.4","typeLabel":"object"},{"type":"null","description":"Configuration for the array item node.","uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.5","typeLabel":"null"}],"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX].\\items","typeLabel":"object · object · object · object · object · null"}},"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0.items.[INDEX]","typeLabel":"object"},"description":"Per-field overrides for individual dataset columns.","isRequired":true,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.0","typeLabel":"object[]"},{"type":"null","description":"Per-field overrides for individual dataset columns.","isRequired":true,"uniqueKey":"configuration.dataset.oneOf.1.fields.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.1.fields","typeLabel":"object[] | null"},"scope":{"oneOf":[{"type":"object","description":"A stat selection with optional per-stat configuration. At least one of enabled_stats or stat_options must be provided. An empty enabled_stats array explicitly disables all stats for this scope. approx_count_distinct and count_distinct are mutually exclusive — the server rejects any request that includes both in the same enabled_stats array.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"configuration.dataset.oneOf.1.scope.oneOf.0.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.1.scope.oneOf.0.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.1.scope.oneOf.0.enabled_stats.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.1.scope.oneOf.0.enabled_stats","typeLabel":"enum\u003cstring>[] | null"},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"configuration.dataset.oneOf.1.scope.oneOf.0.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"configuration.dataset.oneOf.1.scope.oneOf.0.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"configuration.dataset.oneOf.1.scope.oneOf.0.stat_options.oneOf.0.histogram","typeLabel":"object"}},"uniqueKey":"configuration.dataset.oneOf.1.scope.oneOf.0.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"uniqueKey":"configuration.dataset.oneOf.1.scope.oneOf.0.stat_options.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.dataset.oneOf.1.scope.oneOf.0.stat_options","typeLabel":"object | null"}},"additionalProperties":false,"uniqueKey":"configuration.dataset.oneOf.1.scope.oneOf.0","typeLabel":"object"},{"type":"object","description":"A stat selection with optional per-stat configuration. At least one of enabled_stats or stat_options must be provided. An empty enabled_stats array explicitly disables all stats for this scope. approx_count_distinct and count_distinct are mutually exclusive — the server rejects any request that includes both in the same enabled_stats array.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"configuration.dataset.oneOf.1.scope.oneOf.1.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"configuration.dataset.oneOf.1.scope.oneOf.1.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"configuration.dataset.oneOf.1.scope.oneOf.1.stat_options.oneOf.0.histogram","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.1.scope.oneOf.1.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.1.scope.oneOf.1.stat_options.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.dataset.oneOf.1.scope.oneOf.1.stat_options","typeLabel":"object | null"},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"configuration.dataset.oneOf.1.scope.oneOf.1.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"configuration.dataset.oneOf.1.scope.oneOf.1.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"configuration.dataset.oneOf.1.scope.oneOf.1.enabled_stats.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.dataset.oneOf.1.scope.oneOf.1.enabled_stats","typeLabel":"enum\u003cstring>[] | null"}},"additionalProperties":false,"uniqueKey":"configuration.dataset.oneOf.1.scope.oneOf.1","typeLabel":"object"},{"type":"null","uniqueKey":"configuration.dataset.oneOf.1.scope.oneOf.2","typeLabel":"null"}],"uniqueKey":"configuration.dataset.oneOf.1.scope","typeLabel":"object · object · null"}},"additionalProperties":false,"uniqueKey":"configuration.dataset.oneOf.1","typeLabel":"object"},{"type":"null","description":"Configuration for dataset schema columns. Use 'scope' to override defaults for all dataset fields, or to disable the namespace entirely via enabled_stats: []. Use 'fields' for per-field overrides. Null when the config does not touch this namespace.","uniqueKey":"configuration.dataset.oneOf.2","typeLabel":"null"}],"uniqueKey":"configuration.dataset","typeLabel":"object · object · null"},"rosetta_stone":{"oneOf":[{"type":"object","description":"Configuration for Rosetta Stone attributes. Use 'scope' to override defaults for all Rosetta Stone fields, or to disable the namespace entirely via enabled_stats: []. Use 'fields' for per-field overrides. Null when the config does not touch this namespace.","required":["scope"],"properties":{"scope":{"oneOf":[{"type":"object","description":"A stat selection with optional per-stat configuration. At least one of enabled_stats or stat_options must be provided. An empty enabled_stats array explicitly disables all stats for this scope. approx_count_distinct and count_distinct are mutually exclusive — the server rejects any request that includes both in the same enabled_stats array.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"configuration.rosetta_stone.oneOf.0.scope.oneOf.0.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.0.scope.oneOf.0.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.0.scope.oneOf.0.enabled_stats.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.0.scope.oneOf.0.enabled_stats","typeLabel":"enum\u003cstring>[] | null"},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"configuration.rosetta_stone.oneOf.0.scope.oneOf.0.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"configuration.rosetta_stone.oneOf.0.scope.oneOf.0.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"configuration.rosetta_stone.oneOf.0.scope.oneOf.0.stat_options.oneOf.0.histogram","typeLabel":"object"}},"uniqueKey":"configuration.rosetta_stone.oneOf.0.scope.oneOf.0.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"uniqueKey":"configuration.rosetta_stone.oneOf.0.scope.oneOf.0.stat_options.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.rosetta_stone.oneOf.0.scope.oneOf.0.stat_options","typeLabel":"object | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.0.scope.oneOf.0","typeLabel":"object"},{"type":"object","description":"A stat selection with optional per-stat configuration. At least one of enabled_stats or stat_options must be provided. An empty enabled_stats array explicitly disables all stats for this scope. approx_count_distinct and count_distinct are mutually exclusive — the server rejects any request that includes both in the same enabled_stats array.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"configuration.rosetta_stone.oneOf.0.scope.oneOf.1.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"configuration.rosetta_stone.oneOf.0.scope.oneOf.1.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"configuration.rosetta_stone.oneOf.0.scope.oneOf.1.stat_options.oneOf.0.histogram","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.0.scope.oneOf.1.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.0.scope.oneOf.1.stat_options.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.0.scope.oneOf.1.stat_options","typeLabel":"object | null"},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"configuration.rosetta_stone.oneOf.0.scope.oneOf.1.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"configuration.rosetta_stone.oneOf.0.scope.oneOf.1.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"configuration.rosetta_stone.oneOf.0.scope.oneOf.1.enabled_stats.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.rosetta_stone.oneOf.0.scope.oneOf.1.enabled_stats","typeLabel":"enum\u003cstring>[] | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.0.scope.oneOf.1","typeLabel":"object"},{"type":"null","isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.0.scope.oneOf.2","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.0.scope","typeLabel":"object · object · null"},"fields":{"oneOf":[{"type":"array","description":"Per-field overrides for individual Rosetta Stone attributes.","items":{"type":"object","description":"Common stat configuration shared by dataset and Rosetta Stone field configs. Exactly one of three modes must be used (the server rejects invalid combinations):\n\n1. **Primitive field** — provide enabled_stats and/or stat_options at the top level.\n Must not include self, properties, or items.\n\n2. **Non-primitive field** — provide self, properties, and/or items for nested structure.\n Must not include enabled_stats or stat_options at this level;\n use self for node-level stat configuration instead.\n\n3. **No-op / inherit** — leave all stat fields null or absent. The field inherits its\n configuration from the namespace scope or global defaults.\n\n\nThis schema deliberately has no `oneOf` over the three modes. Mode 3 is all five slots null, which matches neither of the other two, so a closed union here would reject it.\nClosing this schema is left to the two that compose it. `additionalProperties: false` here would only see the properties below, so it would reject the `field_name` and `attribute_name` its siblings contribute; `DatasetFieldConfig` and `RosettaStoneFieldConfig` use `unevaluatedProperties: false`, which sees the whole composition.","required":["attribute_name"],"properties":{"attribute_name":{"type":"string","description":"The Rosetta Stone attribute name (e.g. 'hl7_gender', 'unique_identifier'). Must be a valid identifier (alphanumeric and underscores, max 256 chars).","maxLength":256,"pattern":"^[a-zA-Z0-9_]+$","isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].attribute_name","typeLabel":"string"},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].enabled_stats.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].enabled_stats","typeLabel":"enum\u003cstring>[] | null"},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].stat_options.oneOf.0.histogram","typeLabel":"object"}},"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].stat_options.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].stat_options","typeLabel":"object | null"},"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive field node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].self.oneOf.0.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].self.oneOf.0.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].self.oneOf.0.enabled_stats.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].self.oneOf.0.enabled_stats","typeLabel":"enum\u003cstring>[] | null"},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].self.oneOf.0.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].self.oneOf.0.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].self.oneOf.0.stat_options.oneOf.0.histogram","typeLabel":"object"}},"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].self.oneOf.0.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].self.oneOf.0.stat_options.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].self.oneOf.0.stat_options","typeLabel":"object | null"}},"additionalProperties":false,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].self.oneOf.0","typeLabel":"object"},{"type":"object","description":"Statistics for the non-primitive field node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].self.oneOf.1.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].self.oneOf.1.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].self.oneOf.1.stat_options.oneOf.0.histogram","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].self.oneOf.1.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].self.oneOf.1.stat_options.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].self.oneOf.1.stat_options","typeLabel":"object | null"},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].self.oneOf.1.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].self.oneOf.1.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].self.oneOf.1.enabled_stats.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].self.oneOf.1.enabled_stats","typeLabel":"enum\u003cstring>[] | null"}},"additionalProperties":false,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].self.oneOf.1","typeLabel":"object"},{"type":"null","description":"Statistics for the non-primitive field node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].self.oneOf.2","typeLabel":"null"}],"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].self","typeLabel":"object · object · null"},"properties":{"oneOf":[{"type":"array","description":"Explicit configurations for named child properties of an object field. Only listed children receive stats — unlisted ones are skipped entirely.","minItems":1,"items":{"oneOf":[{"type":"object","description":"Statistics configuration for a named property of an object node. The property may itself be primitive or non-primitive (recursive). A property must carry at least one configuration field — there is no no-op/inherited variant at the nested level. If a property is listed, it must specify what stats to compute. approx_count_distinct and count_distinct are mutually exclusive — the server rejects any request that includes both in the same enabled_stats array.","required":["path","enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.0.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.0.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.0.enabled_stats.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.0.enabled_stats","typeLabel":"enum\u003cstring>[] | null"},"path":{"type":"string","description":"Name of the child property relative to the parent object node. Must be a valid identifier (alphanumeric and underscores, max 256 chars).","maxLength":256,"pattern":"^[a-zA-Z0-9_]+$","isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.0.path","typeLabel":"string"},"self":{"type":"null","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.0.self","typeLabel":"null"},"properties":{"type":"null","description":"Explicit configurations for named child properties of this object property. Only listed children receive stats — unlisted ones are skipped entirely.","minItems":1,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.0.properties","typeLabel":"null"},"items":{"type":"null","description":"Configuration for the array item node of this array property.","uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.0.\\items","typeLabel":"null"},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.0.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.0.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.0.stat_options.oneOf.0.histogram","typeLabel":"object"}},"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.0.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.0.stat_options.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.0.stat_options","typeLabel":"object | null"}},"additionalProperties":false,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.0","typeLabel":"object"},{"type":"object","description":"Statistics configuration for a named property of an object node. The property may itself be primitive or non-primitive (recursive). A property must carry at least one configuration field — there is no no-op/inherited variant at the nested level. If a property is listed, it must specify what stats to compute. approx_count_distinct and count_distinct are mutually exclusive — the server rejects any request that includes both in the same enabled_stats array.","required":["path","stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.1.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.1.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.1.stat_options.oneOf.0.histogram","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.1.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.1.stat_options.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.1.stat_options","typeLabel":"object | null"},"path":{"type":"string","description":"Name of the child property relative to the parent object node. Must be a valid identifier (alphanumeric and underscores, max 256 chars).","maxLength":256,"pattern":"^[a-zA-Z0-9_]+$","isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.1.path","typeLabel":"string"},"self":{"type":"null","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.1.self","typeLabel":"null"},"properties":{"type":"null","description":"Explicit configurations for named child properties of this object property. Only listed children receive stats — unlisted ones are skipped entirely.","minItems":1,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.1.properties","typeLabel":"null"},"items":{"type":"null","description":"Configuration for the array item node of this array property.","uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.1.\\items","typeLabel":"null"},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.1.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.1.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.1.enabled_stats.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.1.enabled_stats","typeLabel":"enum\u003cstring>[] | null"}},"additionalProperties":false,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.1","typeLabel":"object"},{"type":"object","description":"Statistics configuration for a named property of an object node. The property may itself be primitive or non-primitive (recursive). A property must carry at least one configuration field — there is no no-op/inherited variant at the nested level. If a property is listed, it must specify what stats to compute. approx_count_distinct and count_distinct are mutually exclusive — the server rejects any request that includes both in the same enabled_stats array.","required":["path","self"],"properties":{"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.self.oneOf.0.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.self.oneOf.0.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.self.oneOf.0.enabled_stats.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.self.oneOf.0.enabled_stats","typeLabel":"enum\u003cstring>[] | null"},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.self.oneOf.0.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.self.oneOf.0.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.self.oneOf.0.stat_options.oneOf.0.histogram","typeLabel":"object"}},"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.self.oneOf.0.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.self.oneOf.0.stat_options.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.self.oneOf.0.stat_options","typeLabel":"object | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.self.oneOf.0","typeLabel":"object"},{"type":"object","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.self.oneOf.1.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.self.oneOf.1.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.self.oneOf.1.stat_options.oneOf.0.histogram","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.self.oneOf.1.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.self.oneOf.1.stat_options.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.self.oneOf.1.stat_options","typeLabel":"object | null"},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.self.oneOf.1.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.self.oneOf.1.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.self.oneOf.1.enabled_stats.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.self.oneOf.1.enabled_stats","typeLabel":"enum\u003cstring>[] | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.self.oneOf.1","typeLabel":"object"},{"type":"null","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.self.oneOf.2","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.self","typeLabel":"object · object · null"},"path":{"type":"string","description":"Name of the child property relative to the parent object node. Must be a valid identifier (alphanumeric and underscores, max 256 chars).","maxLength":256,"pattern":"^[a-zA-Z0-9_]+$","isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.path","typeLabel":"string"},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.enabled_stats","typeLabel":"null"},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.stat_options","typeLabel":"null"},"properties":{"oneOf":[{"type":"array","description":"Explicit configurations for named child properties of this object property. Only listed children receive stats — unlisted ones are skipped entirely.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"},"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.properties.oneOf.0","typeLabel":"array"},{"type":"null","description":"Explicit configurations for named child properties of this object property. Only listed children receive stats — unlisted ones are skipped entirely.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"},"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.properties.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.properties","typeLabel":"array | null"},"items":{"oneOf":[{"type":"object","description":"Configuration for the array item node of this array property.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.0.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.0.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.0.enabled_stats.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.0.enabled_stats","typeLabel":"enum\u003cstring>[] | null"},"self":{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.0.self","typeLabel":"null"},"properties":{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.0.properties","typeLabel":"null"},"items":{"oneOf":[{"type":"null","description":"Configuration for the array item node.","uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.0.\\items.oneOf.0","typeLabel":"null"},{"type":"null","description":"Configuration for the array item node.","uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.0.\\items.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.0.\\items","typeLabel":"null"},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.0.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.0.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.0.stat_options.oneOf.0.histogram","typeLabel":"object"}},"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.0.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.0.stat_options.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.0.stat_options","typeLabel":"object | null"}},"additionalProperties":false,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.0","typeLabel":"object"},{"type":"object","description":"Configuration for the array item node of this array property.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.1.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.1.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.1.stat_options.oneOf.0.histogram","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.1.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.1.stat_options.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.1.stat_options","typeLabel":"object | null"},"self":{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.1.self","typeLabel":"null"},"properties":{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.1.properties","typeLabel":"null"},"items":{"oneOf":[{"type":"null","description":"Configuration for the array item node.","uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.1.\\items.oneOf.0","typeLabel":"null"},{"type":"null","description":"Configuration for the array item node.","uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.1.\\items.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.1.\\items","typeLabel":"null"},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.1.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.1.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.1.enabled_stats.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.1.enabled_stats","typeLabel":"enum\u003cstring>[] | null"}},"additionalProperties":false,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.1","typeLabel":"object"},{"type":"object","description":"Configuration for the array item node of this array property.","required":["self"],"properties":{"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.self.oneOf.0.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.self.oneOf.0.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.self.oneOf.0.enabled_stats.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.self.oneOf.0.enabled_stats","typeLabel":"enum\u003cstring>[] | null"},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.self.oneOf.0.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.self.oneOf.0.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.self.oneOf.0.stat_options.oneOf.0.histogram","typeLabel":"object"}},"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.self.oneOf.0.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.self.oneOf.0.stat_options.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.self.oneOf.0.stat_options","typeLabel":"object | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.self.oneOf.0","typeLabel":"object"},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.self.oneOf.1.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.self.oneOf.1.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.self.oneOf.1.stat_options.oneOf.0.histogram","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.self.oneOf.1.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.self.oneOf.1.stat_options.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.self.oneOf.1.stat_options","typeLabel":"object | null"},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.self.oneOf.1.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.self.oneOf.1.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.self.oneOf.1.enabled_stats.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.self.oneOf.1.enabled_stats","typeLabel":"enum\u003cstring>[] | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.self.oneOf.1","typeLabel":"object"},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.self.oneOf.2","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.self","typeLabel":"object · object · null"},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.enabled_stats","typeLabel":"null"},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.stat_options","typeLabel":"null"},"properties":{"oneOf":[{"type":"array","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"},"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.properties.oneOf.0","typeLabel":"array"},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"},"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.properties.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.properties","typeLabel":"array | null"},"items":{"oneOf":[{"description":"Configuration for the array item node.","uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.\\items.oneOf.0","typeLabel":"any"},{"type":"null","description":"Configuration for the array item node.","uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.\\items.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.\\items","typeLabel":"any | null"}},"additionalProperties":false,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2","typeLabel":"object"},{"type":"object","description":"Configuration for the array item node of this array property.","required":["properties"],"properties":{"properties":{"oneOf":[{"type":"array","items":{"oneOf":[{}],"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.properties.oneOf.0.items.[INDEX]","typeLabel":"any"},"description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.properties.oneOf.0","typeLabel":"any[]"},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.properties.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.properties","typeLabel":"any[] | null"},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.enabled_stats","typeLabel":"null"},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.stat_options","typeLabel":"null"},"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.self.oneOf.0.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.self.oneOf.0.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.self.oneOf.0.enabled_stats.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.self.oneOf.0.enabled_stats","typeLabel":"enum\u003cstring>[] | null"},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.self.oneOf.0.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.self.oneOf.0.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.self.oneOf.0.stat_options.oneOf.0.histogram","typeLabel":"object"}},"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.self.oneOf.0.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.self.oneOf.0.stat_options.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.self.oneOf.0.stat_options","typeLabel":"object | null"}},"additionalProperties":false,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.self.oneOf.0","typeLabel":"object"},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.self.oneOf.1.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.self.oneOf.1.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.self.oneOf.1.stat_options.oneOf.0.histogram","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.self.oneOf.1.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.self.oneOf.1.stat_options.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.self.oneOf.1.stat_options","typeLabel":"object | null"},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.self.oneOf.1.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.self.oneOf.1.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.self.oneOf.1.enabled_stats.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.self.oneOf.1.enabled_stats","typeLabel":"enum\u003cstring>[] | null"}},"additionalProperties":false,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.self.oneOf.1","typeLabel":"object"},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.self.oneOf.2","typeLabel":"null"}],"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.self","typeLabel":"object · object · null"},"items":{"oneOf":[{"description":"Configuration for the array item node.","uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.\\items.oneOf.0","typeLabel":"any"},{"type":"null","description":"Configuration for the array item node.","uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.\\items.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.\\items","typeLabel":"any | null"}},"additionalProperties":false,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3","typeLabel":"object"},{"type":"object","description":"Configuration for the array item node of this array property.","required":["items"],"properties":{"items":{"oneOf":[{"description":"Configuration for the array item node.","isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.\\items.oneOf.0","typeLabel":"any"},{"type":"null","description":"Configuration for the array item node.","isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.\\items.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.\\items","typeLabel":"any | null"},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.enabled_stats","typeLabel":"null"},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.stat_options","typeLabel":"null"},"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.self.oneOf.0.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.self.oneOf.0.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.self.oneOf.0.enabled_stats.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.self.oneOf.0.enabled_stats","typeLabel":"enum\u003cstring>[] | null"},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.self.oneOf.0.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.self.oneOf.0.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.self.oneOf.0.stat_options.oneOf.0.histogram","typeLabel":"object"}},"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.self.oneOf.0.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.self.oneOf.0.stat_options.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.self.oneOf.0.stat_options","typeLabel":"object | null"}},"additionalProperties":false,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.self.oneOf.0","typeLabel":"object"},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.self.oneOf.1.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.self.oneOf.1.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.self.oneOf.1.stat_options.oneOf.0.histogram","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.self.oneOf.1.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.self.oneOf.1.stat_options.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.self.oneOf.1.stat_options","typeLabel":"object | null"},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.self.oneOf.1.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.self.oneOf.1.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.self.oneOf.1.enabled_stats.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.self.oneOf.1.enabled_stats","typeLabel":"enum\u003cstring>[] | null"}},"additionalProperties":false,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.self.oneOf.1","typeLabel":"object"},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.self.oneOf.2","typeLabel":"null"}],"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.self","typeLabel":"object · object · null"},"properties":{"oneOf":[{"type":"array","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"},"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.properties.oneOf.0","typeLabel":"array"},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"},"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.properties.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.properties","typeLabel":"array | null"}},"additionalProperties":false,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4","typeLabel":"object"},{"type":"null","description":"Configuration for the array item node of this array property.","uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.5","typeLabel":"null"}],"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items","typeLabel":"object · object · object · object · object · null"}},"additionalProperties":false,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2","typeLabel":"object"},{"type":"object","description":"Statistics configuration for a named property of an object node. The property may itself be primitive or non-primitive (recursive). A property must carry at least one configuration field — there is no no-op/inherited variant at the nested level. If a property is listed, it must specify what stats to compute. approx_count_distinct and count_distinct are mutually exclusive — the server rejects any request that includes both in the same enabled_stats array.","required":["path","properties"],"properties":{"properties":{"oneOf":[{"type":"array","items":{"oneOf":[{}],"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.properties.oneOf.0.items.[INDEX]","typeLabel":"any"},"description":"Explicit configurations for named child properties of this object property. Only listed children receive stats — unlisted ones are skipped entirely.","minItems":1,"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.properties.oneOf.0","typeLabel":"any[]"},{"type":"null","description":"Explicit configurations for named child properties of this object property. Only listed children receive stats — unlisted ones are skipped entirely.","minItems":1,"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.properties.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.properties","typeLabel":"any[] | null"},"path":{"type":"string","description":"Name of the child property relative to the parent object node. Must be a valid identifier (alphanumeric and underscores, max 256 chars).","maxLength":256,"pattern":"^[a-zA-Z0-9_]+$","isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.path","typeLabel":"string"},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.enabled_stats","typeLabel":"null"},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.stat_options","typeLabel":"null"},"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.self.oneOf.0.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.self.oneOf.0.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.self.oneOf.0.enabled_stats.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.self.oneOf.0.enabled_stats","typeLabel":"enum\u003cstring>[] | null"},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.self.oneOf.0.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.self.oneOf.0.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.self.oneOf.0.stat_options.oneOf.0.histogram","typeLabel":"object"}},"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.self.oneOf.0.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.self.oneOf.0.stat_options.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.self.oneOf.0.stat_options","typeLabel":"object | null"}},"additionalProperties":false,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.self.oneOf.0","typeLabel":"object"},{"type":"object","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.self.oneOf.1.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.self.oneOf.1.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.self.oneOf.1.stat_options.oneOf.0.histogram","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.self.oneOf.1.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.self.oneOf.1.stat_options.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.self.oneOf.1.stat_options","typeLabel":"object | null"},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.self.oneOf.1.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.self.oneOf.1.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.self.oneOf.1.enabled_stats.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.self.oneOf.1.enabled_stats","typeLabel":"enum\u003cstring>[] | null"}},"additionalProperties":false,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.self.oneOf.1","typeLabel":"object"},{"type":"null","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.self.oneOf.2","typeLabel":"null"}],"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.self","typeLabel":"object · object · null"},"items":{"oneOf":[{"type":"object","description":"Configuration for the array item node of this array property.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.0.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.0.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.0.enabled_stats.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.0.enabled_stats","typeLabel":"enum\u003cstring>[] | null"},"self":{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.0.self","typeLabel":"null"},"properties":{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.0.properties","typeLabel":"null"},"items":{"oneOf":[{"type":"null","description":"Configuration for the array item node.","uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.0.\\items.oneOf.0","typeLabel":"null"},{"type":"null","description":"Configuration for the array item node.","uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.0.\\items.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.0.\\items","typeLabel":"null"},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.0.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.0.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.0.stat_options.oneOf.0.histogram","typeLabel":"object"}},"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.0.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.0.stat_options.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.0.stat_options","typeLabel":"object | null"}},"additionalProperties":false,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.0","typeLabel":"object"},{"type":"object","description":"Configuration for the array item node of this array property.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.1.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.1.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.1.stat_options.oneOf.0.histogram","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.1.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.1.stat_options.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.1.stat_options","typeLabel":"object | null"},"self":{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.1.self","typeLabel":"null"},"properties":{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.1.properties","typeLabel":"null"},"items":{"oneOf":[{"type":"null","description":"Configuration for the array item node.","uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.1.\\items.oneOf.0","typeLabel":"null"},{"type":"null","description":"Configuration for the array item node.","uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.1.\\items.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.1.\\items","typeLabel":"null"},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.1.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.1.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.1.enabled_stats.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.1.enabled_stats","typeLabel":"enum\u003cstring>[] | null"}},"additionalProperties":false,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.1","typeLabel":"object"},{"type":"object","description":"Configuration for the array item node of this array property.","required":["self"],"properties":{"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.self.oneOf.0.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.self.oneOf.0.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.self.oneOf.0.enabled_stats.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.self.oneOf.0.enabled_stats","typeLabel":"enum\u003cstring>[] | null"},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.self.oneOf.0.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.self.oneOf.0.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.self.oneOf.0.stat_options.oneOf.0.histogram","typeLabel":"object"}},"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.self.oneOf.0.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.self.oneOf.0.stat_options.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.self.oneOf.0.stat_options","typeLabel":"object | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.self.oneOf.0","typeLabel":"object"},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.self.oneOf.1.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.self.oneOf.1.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.self.oneOf.1.stat_options.oneOf.0.histogram","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.self.oneOf.1.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.self.oneOf.1.stat_options.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.self.oneOf.1.stat_options","typeLabel":"object | null"},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.self.oneOf.1.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.self.oneOf.1.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.self.oneOf.1.enabled_stats.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.self.oneOf.1.enabled_stats","typeLabel":"enum\u003cstring>[] | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.self.oneOf.1","typeLabel":"object"},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.self.oneOf.2","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.self","typeLabel":"object · object · null"},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.enabled_stats","typeLabel":"null"},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.stat_options","typeLabel":"null"},"properties":{"oneOf":[{"type":"array","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"},"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.properties.oneOf.0","typeLabel":"array"},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"},"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.properties.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.properties","typeLabel":"array | null"},"items":{"oneOf":[{"description":"Configuration for the array item node.","uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.\\items.oneOf.0","typeLabel":"any"},{"type":"null","description":"Configuration for the array item node.","uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.\\items.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.\\items","typeLabel":"any | null"}},"additionalProperties":false,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2","typeLabel":"object"},{"type":"object","description":"Configuration for the array item node of this array property.","required":["properties"],"properties":{"properties":{"oneOf":[{"type":"array","items":{"oneOf":[{}],"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.properties.oneOf.0.items.[INDEX]","typeLabel":"any"},"description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.properties.oneOf.0","typeLabel":"any[]"},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.properties.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.properties","typeLabel":"any[] | null"},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.enabled_stats","typeLabel":"null"},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.stat_options","typeLabel":"null"},"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.self.oneOf.0.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.self.oneOf.0.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.self.oneOf.0.enabled_stats.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.self.oneOf.0.enabled_stats","typeLabel":"enum\u003cstring>[] | null"},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.self.oneOf.0.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.self.oneOf.0.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.self.oneOf.0.stat_options.oneOf.0.histogram","typeLabel":"object"}},"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.self.oneOf.0.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.self.oneOf.0.stat_options.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.self.oneOf.0.stat_options","typeLabel":"object | null"}},"additionalProperties":false,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.self.oneOf.0","typeLabel":"object"},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.self.oneOf.1.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.self.oneOf.1.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.self.oneOf.1.stat_options.oneOf.0.histogram","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.self.oneOf.1.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.self.oneOf.1.stat_options.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.self.oneOf.1.stat_options","typeLabel":"object | null"},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.self.oneOf.1.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.self.oneOf.1.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.self.oneOf.1.enabled_stats.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.self.oneOf.1.enabled_stats","typeLabel":"enum\u003cstring>[] | null"}},"additionalProperties":false,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.self.oneOf.1","typeLabel":"object"},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.self.oneOf.2","typeLabel":"null"}],"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.self","typeLabel":"object · object · null"},"items":{"oneOf":[{"description":"Configuration for the array item node.","uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.\\items.oneOf.0","typeLabel":"any"},{"type":"null","description":"Configuration for the array item node.","uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.\\items.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.\\items","typeLabel":"any | null"}},"additionalProperties":false,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3","typeLabel":"object"},{"type":"object","description":"Configuration for the array item node of this array property.","required":["items"],"properties":{"items":{"oneOf":[{"description":"Configuration for the array item node.","isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.\\items.oneOf.0","typeLabel":"any"},{"type":"null","description":"Configuration for the array item node.","isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.\\items.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.\\items","typeLabel":"any | null"},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.enabled_stats","typeLabel":"null"},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.stat_options","typeLabel":"null"},"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.self.oneOf.0.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.self.oneOf.0.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.self.oneOf.0.enabled_stats.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.self.oneOf.0.enabled_stats","typeLabel":"enum\u003cstring>[] | null"},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.self.oneOf.0.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.self.oneOf.0.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.self.oneOf.0.stat_options.oneOf.0.histogram","typeLabel":"object"}},"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.self.oneOf.0.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.self.oneOf.0.stat_options.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.self.oneOf.0.stat_options","typeLabel":"object | null"}},"additionalProperties":false,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.self.oneOf.0","typeLabel":"object"},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.self.oneOf.1.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.self.oneOf.1.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.self.oneOf.1.stat_options.oneOf.0.histogram","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.self.oneOf.1.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.self.oneOf.1.stat_options.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.self.oneOf.1.stat_options","typeLabel":"object | null"},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.self.oneOf.1.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.self.oneOf.1.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.self.oneOf.1.enabled_stats.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.self.oneOf.1.enabled_stats","typeLabel":"enum\u003cstring>[] | null"}},"additionalProperties":false,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.self.oneOf.1","typeLabel":"object"},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.self.oneOf.2","typeLabel":"null"}],"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.self","typeLabel":"object · object · null"},"properties":{"oneOf":[{"type":"array","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"},"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.properties.oneOf.0","typeLabel":"array"},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"},"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.properties.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.properties","typeLabel":"array | null"}},"additionalProperties":false,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4","typeLabel":"object"},{"type":"null","description":"Configuration for the array item node of this array property.","uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.5","typeLabel":"null"}],"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items","typeLabel":"object · object · object · object · object · null"}},"additionalProperties":false,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3","typeLabel":"object"},{"type":"object","description":"Statistics configuration for a named property of an object node. The property may itself be primitive or non-primitive (recursive). A property must carry at least one configuration field — there is no no-op/inherited variant at the nested level. If a property is listed, it must specify what stats to compute. approx_count_distinct and count_distinct are mutually exclusive — the server rejects any request that includes both in the same enabled_stats array.","required":["path","items"],"properties":{"items":{"oneOf":[{"type":"object","description":"Configuration for the array item node of this array property.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.0.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.0.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.0.enabled_stats.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.0.enabled_stats","typeLabel":"enum\u003cstring>[] | null"},"self":{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.0.self","typeLabel":"null"},"properties":{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.0.properties","typeLabel":"null"},"items":{"oneOf":[{"type":"null","description":"Configuration for the array item node.","uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.0.\\items.oneOf.0","typeLabel":"null"},{"type":"null","description":"Configuration for the array item node.","uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.0.\\items.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.0.\\items","typeLabel":"null"},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.0.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.0.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.0.stat_options.oneOf.0.histogram","typeLabel":"object"}},"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.0.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.0.stat_options.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.0.stat_options","typeLabel":"object | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.0","typeLabel":"object"},{"type":"object","description":"Configuration for the array item node of this array property.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.1.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.1.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.1.stat_options.oneOf.0.histogram","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.1.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.1.stat_options.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.1.stat_options","typeLabel":"object | null"},"self":{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.1.self","typeLabel":"null"},"properties":{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.1.properties","typeLabel":"null"},"items":{"oneOf":[{"type":"null","description":"Configuration for the array item node.","uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.1.\\items.oneOf.0","typeLabel":"null"},{"type":"null","description":"Configuration for the array item node.","uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.1.\\items.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.1.\\items","typeLabel":"null"},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.1.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.1.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.1.enabled_stats.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.1.enabled_stats","typeLabel":"enum\u003cstring>[] | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.1","typeLabel":"object"},{"type":"object","description":"Configuration for the array item node of this array property.","required":["self"],"properties":{"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.self.oneOf.0.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.self.oneOf.0.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.self.oneOf.0.enabled_stats.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.self.oneOf.0.enabled_stats","typeLabel":"enum\u003cstring>[] | null"},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.self.oneOf.0.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.self.oneOf.0.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.self.oneOf.0.stat_options.oneOf.0.histogram","typeLabel":"object"}},"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.self.oneOf.0.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.self.oneOf.0.stat_options.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.self.oneOf.0.stat_options","typeLabel":"object | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.self.oneOf.0","typeLabel":"object"},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.self.oneOf.1.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.self.oneOf.1.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.self.oneOf.1.stat_options.oneOf.0.histogram","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.self.oneOf.1.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.self.oneOf.1.stat_options.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.self.oneOf.1.stat_options","typeLabel":"object | null"},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.self.oneOf.1.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.self.oneOf.1.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.self.oneOf.1.enabled_stats.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.self.oneOf.1.enabled_stats","typeLabel":"enum\u003cstring>[] | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.self.oneOf.1","typeLabel":"object"},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.self.oneOf.2","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.self","typeLabel":"object · object · null"},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.enabled_stats","typeLabel":"null"},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.stat_options","typeLabel":"null"},"properties":{"oneOf":[{"type":"array","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"},"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.properties.oneOf.0","typeLabel":"array"},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"},"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.properties.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.properties","typeLabel":"array | null"},"items":{"oneOf":[{"description":"Configuration for the array item node.","uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.\\items.oneOf.0","typeLabel":"any"},{"type":"null","description":"Configuration for the array item node.","uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.\\items.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.\\items","typeLabel":"any | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2","typeLabel":"object"},{"type":"object","description":"Configuration for the array item node of this array property.","required":["properties"],"properties":{"properties":{"oneOf":[{"type":"array","items":{"oneOf":[{}],"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.properties.oneOf.0.items.[INDEX]","typeLabel":"any"},"description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.properties.oneOf.0","typeLabel":"any[]"},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.properties.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.properties","typeLabel":"any[] | null"},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.enabled_stats","typeLabel":"null"},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.stat_options","typeLabel":"null"},"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.self.oneOf.0.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.self.oneOf.0.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.self.oneOf.0.enabled_stats.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.self.oneOf.0.enabled_stats","typeLabel":"enum\u003cstring>[] | null"},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.self.oneOf.0.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.self.oneOf.0.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.self.oneOf.0.stat_options.oneOf.0.histogram","typeLabel":"object"}},"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.self.oneOf.0.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.self.oneOf.0.stat_options.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.self.oneOf.0.stat_options","typeLabel":"object | null"}},"additionalProperties":false,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.self.oneOf.0","typeLabel":"object"},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.self.oneOf.1.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.self.oneOf.1.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.self.oneOf.1.stat_options.oneOf.0.histogram","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.self.oneOf.1.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.self.oneOf.1.stat_options.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.self.oneOf.1.stat_options","typeLabel":"object | null"},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.self.oneOf.1.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.self.oneOf.1.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.self.oneOf.1.enabled_stats.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.self.oneOf.1.enabled_stats","typeLabel":"enum\u003cstring>[] | null"}},"additionalProperties":false,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.self.oneOf.1","typeLabel":"object"},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.self.oneOf.2","typeLabel":"null"}],"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.self","typeLabel":"object · object · null"},"items":{"oneOf":[{"description":"Configuration for the array item node.","uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.\\items.oneOf.0","typeLabel":"any"},{"type":"null","description":"Configuration for the array item node.","uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.\\items.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.\\items","typeLabel":"any | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3","typeLabel":"object"},{"type":"object","description":"Configuration for the array item node of this array property.","required":["items"],"properties":{"items":{"oneOf":[{"description":"Configuration for the array item node.","isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.\\items.oneOf.0","typeLabel":"any"},{"type":"null","description":"Configuration for the array item node.","isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.\\items.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.\\items","typeLabel":"any | null"},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.enabled_stats","typeLabel":"null"},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.stat_options","typeLabel":"null"},"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.self.oneOf.0.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.self.oneOf.0.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.self.oneOf.0.enabled_stats.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.self.oneOf.0.enabled_stats","typeLabel":"enum\u003cstring>[] | null"},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.self.oneOf.0.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.self.oneOf.0.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.self.oneOf.0.stat_options.oneOf.0.histogram","typeLabel":"object"}},"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.self.oneOf.0.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.self.oneOf.0.stat_options.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.self.oneOf.0.stat_options","typeLabel":"object | null"}},"additionalProperties":false,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.self.oneOf.0","typeLabel":"object"},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.self.oneOf.1.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.self.oneOf.1.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.self.oneOf.1.stat_options.oneOf.0.histogram","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.self.oneOf.1.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.self.oneOf.1.stat_options.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.self.oneOf.1.stat_options","typeLabel":"object | null"},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.self.oneOf.1.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.self.oneOf.1.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.self.oneOf.1.enabled_stats.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.self.oneOf.1.enabled_stats","typeLabel":"enum\u003cstring>[] | null"}},"additionalProperties":false,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.self.oneOf.1","typeLabel":"object"},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.self.oneOf.2","typeLabel":"null"}],"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.self","typeLabel":"object · object · null"},"properties":{"oneOf":[{"type":"array","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"},"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.properties.oneOf.0","typeLabel":"array"},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"},"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.properties.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.properties","typeLabel":"array | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4","typeLabel":"object"},{"type":"null","description":"Configuration for the array item node of this array property.","isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.5","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items","typeLabel":"object · object · object · object · object · null"},"path":{"type":"string","description":"Name of the child property relative to the parent object node. Must be a valid identifier (alphanumeric and underscores, max 256 chars).","maxLength":256,"pattern":"^[a-zA-Z0-9_]+$","isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.path","typeLabel":"string"},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.enabled_stats","typeLabel":"null"},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.stat_options","typeLabel":"null"},"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.self.oneOf.0.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.self.oneOf.0.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.self.oneOf.0.enabled_stats.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.self.oneOf.0.enabled_stats","typeLabel":"enum\u003cstring>[] | null"},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.self.oneOf.0.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.self.oneOf.0.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.self.oneOf.0.stat_options.oneOf.0.histogram","typeLabel":"object"}},"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.self.oneOf.0.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.self.oneOf.0.stat_options.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.self.oneOf.0.stat_options","typeLabel":"object | null"}},"additionalProperties":false,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.self.oneOf.0","typeLabel":"object"},{"type":"object","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.self.oneOf.1.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.self.oneOf.1.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.self.oneOf.1.stat_options.oneOf.0.histogram","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.self.oneOf.1.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.self.oneOf.1.stat_options.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.self.oneOf.1.stat_options","typeLabel":"object | null"},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.self.oneOf.1.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.self.oneOf.1.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.self.oneOf.1.enabled_stats.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.self.oneOf.1.enabled_stats","typeLabel":"enum\u003cstring>[] | null"}},"additionalProperties":false,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.self.oneOf.1","typeLabel":"object"},{"type":"null","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.self.oneOf.2","typeLabel":"null"}],"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.self","typeLabel":"object · object · null"},"properties":{"oneOf":[{"type":"array","description":"Explicit configurations for named child properties of this object property. Only listed children receive stats — unlisted ones are skipped entirely.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"},"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.properties.oneOf.0","typeLabel":"array"},{"type":"null","description":"Explicit configurations for named child properties of this object property. Only listed children receive stats — unlisted ones are skipped entirely.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"},"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.properties.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.properties","typeLabel":"array | null"}},"additionalProperties":false,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4","typeLabel":"object"}],"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX]","typeLabel":"object"},"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.0","typeLabel":"object[]"},{"type":"null","description":"Explicit configurations for named child properties of an object field. Only listed children receive stats — unlisted ones are skipped entirely.","minItems":1,"items":{"oneOf":[{"type":"object","description":"Statistics configuration for a named property of an object node. The property may itself be primitive or non-primitive (recursive). A property must carry at least one configuration field — there is no no-op/inherited variant at the nested level. If a property is listed, it must specify what stats to compute. approx_count_distinct and count_distinct are mutually exclusive — the server rejects any request that includes both in the same enabled_stats array.","required":["path","enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"self":{"type":"null","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."},"properties":{"type":"null","description":"Explicit configurations for named child properties of this object property. Only listed children receive stats — unlisted ones are skipped entirely.","minItems":1},"items":{"type":"null","description":"Configuration for the array item node of this array property."},"path":{"type":"string","description":"Name of the child property relative to the parent object node. Must be a valid identifier (alphanumeric and underscores, max 256 chars).","maxLength":256,"pattern":"^[a-zA-Z0-9_]+$"},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Statistics configuration for a named property of an object node. The property may itself be primitive or non-primitive (recursive). A property must carry at least one configuration field — there is no no-op/inherited variant at the nested level. If a property is listed, it must specify what stats to compute. approx_count_distinct and count_distinct are mutually exclusive — the server rejects any request that includes both in the same enabled_stats array.","required":["path","stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"self":{"type":"null","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."},"properties":{"type":"null","description":"Explicit configurations for named child properties of this object property. Only listed children receive stats — unlisted ones are skipped entirely.","minItems":1},"items":{"type":"null","description":"Configuration for the array item node of this array property."},"path":{"type":"string","description":"Name of the child property relative to the parent object node. Must be a valid identifier (alphanumeric and underscores, max 256 chars).","maxLength":256,"pattern":"^[a-zA-Z0-9_]+$"},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"object","description":"Statistics configuration for a named property of an object node. The property may itself be primitive or non-primitive (recursive). A property must carry at least one configuration field — there is no no-op/inherited variant at the nested level. If a property is listed, it must specify what stats to compute. approx_count_distinct and count_distinct are mutually exclusive — the server rejects any request that includes both in the same enabled_stats array.","required":["path","self"],"properties":{"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"null","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."}]},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},"path":{"type":"string","description":"Name of the child property relative to the parent object node. Must be a valid identifier (alphanumeric and underscores, max 256 chars).","maxLength":256,"pattern":"^[a-zA-Z0-9_]+$"},"properties":{"oneOf":[{"type":"array","description":"Explicit configurations for named child properties of this object property. Only listed children receive stats — unlisted ones are skipped entirely.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}},{"type":"null","description":"Explicit configurations for named child properties of this object property. Only listed children receive stats — unlisted ones are skipped entirely.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}}]},"items":{"oneOf":[{"type":"object","description":"Configuration for the array item node of this array property.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"self":{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."},"properties":{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1},"items":{"oneOf":[{"type":"null","description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Configuration for the array item node of this array property.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"self":{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."},"properties":{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1},"items":{"oneOf":[{"type":"null","description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"object","description":"Configuration for the array item node of this array property.","required":["self"],"properties":{"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."}]},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},"properties":{"oneOf":[{"type":"array","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}}]},"items":{"oneOf":[{"description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]}},"additionalProperties":false},{"type":"object","description":"Configuration for the array item node of this array property.","required":["properties"],"properties":{"properties":{"oneOf":[{"type":"array","items":{"oneOf":[{}]},"description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1}]},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."}]},"items":{"oneOf":[{"description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]}},"additionalProperties":false},{"type":"object","description":"Configuration for the array item node of this array property.","required":["items"],"properties":{"items":{"oneOf":[{"description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."}]},"properties":{"oneOf":[{"type":"array","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}}]}},"additionalProperties":false},{"type":"null","description":"Configuration for the array item node of this array property."}]}},"additionalProperties":false},{"type":"object","description":"Statistics configuration for a named property of an object node. The property may itself be primitive or non-primitive (recursive). A property must carry at least one configuration field — there is no no-op/inherited variant at the nested level. If a property is listed, it must specify what stats to compute. approx_count_distinct and count_distinct are mutually exclusive — the server rejects any request that includes both in the same enabled_stats array.","required":["path","properties"],"properties":{"properties":{"oneOf":[{"type":"array","items":{"oneOf":[{}]},"description":"Explicit configurations for named child properties of this object property. Only listed children receive stats — unlisted ones are skipped entirely.","minItems":1},{"type":"null","description":"Explicit configurations for named child properties of this object property. Only listed children receive stats — unlisted ones are skipped entirely.","minItems":1}]},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},"path":{"type":"string","description":"Name of the child property relative to the parent object node. Must be a valid identifier (alphanumeric and underscores, max 256 chars).","maxLength":256,"pattern":"^[a-zA-Z0-9_]+$"},"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"null","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."}]},"items":{"oneOf":[{"type":"object","description":"Configuration for the array item node of this array property.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"self":{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."},"properties":{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1},"items":{"oneOf":[{"type":"null","description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Configuration for the array item node of this array property.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"self":{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."},"properties":{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1},"items":{"oneOf":[{"type":"null","description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"object","description":"Configuration for the array item node of this array property.","required":["self"],"properties":{"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."}]},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},"properties":{"oneOf":[{"type":"array","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}}]},"items":{"oneOf":[{"description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]}},"additionalProperties":false},{"type":"object","description":"Configuration for the array item node of this array property.","required":["properties"],"properties":{"properties":{"oneOf":[{"type":"array","items":{"oneOf":[{}]},"description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1}]},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."}]},"items":{"oneOf":[{"description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]}},"additionalProperties":false},{"type":"object","description":"Configuration for the array item node of this array property.","required":["items"],"properties":{"items":{"oneOf":[{"description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."}]},"properties":{"oneOf":[{"type":"array","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}}]}},"additionalProperties":false},{"type":"null","description":"Configuration for the array item node of this array property."}]}},"additionalProperties":false},{"type":"object","description":"Statistics configuration for a named property of an object node. The property may itself be primitive or non-primitive (recursive). A property must carry at least one configuration field — there is no no-op/inherited variant at the nested level. If a property is listed, it must specify what stats to compute. approx_count_distinct and count_distinct are mutually exclusive — the server rejects any request that includes both in the same enabled_stats array.","required":["path","items"],"properties":{"items":{"oneOf":[{"type":"object","description":"Configuration for the array item node of this array property.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"self":{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."},"properties":{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1},"items":{"oneOf":[{"type":"null","description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Configuration for the array item node of this array property.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"self":{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."},"properties":{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1},"items":{"oneOf":[{"type":"null","description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"object","description":"Configuration for the array item node of this array property.","required":["self"],"properties":{"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."}]},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},"properties":{"oneOf":[{"type":"array","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}}]},"items":{"oneOf":[{"description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]}},"additionalProperties":false},{"type":"object","description":"Configuration for the array item node of this array property.","required":["properties"],"properties":{"properties":{"oneOf":[{"type":"array","items":{"oneOf":[{}]},"description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1}]},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."}]},"items":{"oneOf":[{"description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]}},"additionalProperties":false},{"type":"object","description":"Configuration for the array item node of this array property.","required":["items"],"properties":{"items":{"oneOf":[{"description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."}]},"properties":{"oneOf":[{"type":"array","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}}]}},"additionalProperties":false},{"type":"null","description":"Configuration for the array item node of this array property."}]},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},"path":{"type":"string","description":"Name of the child property relative to the parent object node. Must be a valid identifier (alphanumeric and underscores, max 256 chars).","maxLength":256,"pattern":"^[a-zA-Z0-9_]+$"},"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"null","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."}]},"properties":{"oneOf":[{"type":"array","description":"Explicit configurations for named child properties of this object property. Only listed children receive stats — unlisted ones are skipped entirely.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}},{"type":"null","description":"Explicit configurations for named child properties of this object property. Only listed children receive stats — unlisted ones are skipped entirely.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}}]}},"additionalProperties":false}]},"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].properties","typeLabel":"object[] | null"},"items":{"oneOf":[{"type":"object","description":"Configuration for the array item node.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.0.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.0.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.0.enabled_stats.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.0.enabled_stats","typeLabel":"enum\u003cstring>[] | null"},"self":{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.0.self","typeLabel":"null"},"properties":{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.0.properties","typeLabel":"null"},"items":{"oneOf":[{"type":"null","description":"Configuration for the array item node.","uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.0.\\items.oneOf.0","typeLabel":"null"},{"type":"null","description":"Configuration for the array item node.","uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.0.\\items.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.0.\\items","typeLabel":"null"},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.0.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.0.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.0.stat_options.oneOf.0.histogram","typeLabel":"object"}},"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.0.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.0.stat_options.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.0.stat_options","typeLabel":"object | null"}},"additionalProperties":false,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.0","typeLabel":"object"},{"type":"object","description":"Configuration for the array item node.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.1.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.1.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.1.stat_options.oneOf.0.histogram","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.1.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.1.stat_options.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.1.stat_options","typeLabel":"object | null"},"self":{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.1.self","typeLabel":"null"},"properties":{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.1.properties","typeLabel":"null"},"items":{"oneOf":[{"type":"null","description":"Configuration for the array item node.","uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.1.\\items.oneOf.0","typeLabel":"null"},{"type":"null","description":"Configuration for the array item node.","uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.1.\\items.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.1.\\items","typeLabel":"null"},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.1.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.1.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.1.enabled_stats.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.1.enabled_stats","typeLabel":"enum\u003cstring>[] | null"}},"additionalProperties":false,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.1","typeLabel":"object"},{"type":"object","description":"Configuration for the array item node.","required":["self"],"properties":{"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.self.oneOf.0.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.self.oneOf.0.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.self.oneOf.0.enabled_stats.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.self.oneOf.0.enabled_stats","typeLabel":"enum\u003cstring>[] | null"},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.self.oneOf.0.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.self.oneOf.0.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.self.oneOf.0.stat_options.oneOf.0.histogram","typeLabel":"object"}},"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.self.oneOf.0.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.self.oneOf.0.stat_options.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.self.oneOf.0.stat_options","typeLabel":"object | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.self.oneOf.0","typeLabel":"object"},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.self.oneOf.1.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.self.oneOf.1.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.self.oneOf.1.stat_options.oneOf.0.histogram","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.self.oneOf.1.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.self.oneOf.1.stat_options.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.self.oneOf.1.stat_options","typeLabel":"object | null"},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.self.oneOf.1.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.self.oneOf.1.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.self.oneOf.1.enabled_stats.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.self.oneOf.1.enabled_stats","typeLabel":"enum\u003cstring>[] | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.self.oneOf.1","typeLabel":"object"},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.self.oneOf.2","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.self","typeLabel":"object · object · null"},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.enabled_stats","typeLabel":"null"},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.stat_options","typeLabel":"null"},"properties":{"oneOf":[{"type":"array","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"},"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.properties.oneOf.0","typeLabel":"array"},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"},"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.properties.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.properties","typeLabel":"array | null"},"items":{"oneOf":[{"description":"Configuration for the array item node.","uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.\\items.oneOf.0","typeLabel":"any"},{"type":"null","description":"Configuration for the array item node.","uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.\\items.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.\\items","typeLabel":"any | null"}},"additionalProperties":false,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.2","typeLabel":"object"},{"type":"object","description":"Configuration for the array item node.","required":["properties"],"properties":{"properties":{"oneOf":[{"type":"array","items":{"oneOf":[{}],"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.properties.oneOf.0.items.[INDEX]","typeLabel":"any"},"description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.properties.oneOf.0","typeLabel":"any[]"},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.properties.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.properties","typeLabel":"any[] | null"},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.enabled_stats","typeLabel":"null"},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.stat_options","typeLabel":"null"},"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.self.oneOf.0.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.self.oneOf.0.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.self.oneOf.0.enabled_stats.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.self.oneOf.0.enabled_stats","typeLabel":"enum\u003cstring>[] | null"},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.self.oneOf.0.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.self.oneOf.0.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.self.oneOf.0.stat_options.oneOf.0.histogram","typeLabel":"object"}},"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.self.oneOf.0.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.self.oneOf.0.stat_options.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.self.oneOf.0.stat_options","typeLabel":"object | null"}},"additionalProperties":false,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.self.oneOf.0","typeLabel":"object"},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.self.oneOf.1.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.self.oneOf.1.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.self.oneOf.1.stat_options.oneOf.0.histogram","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.self.oneOf.1.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.self.oneOf.1.stat_options.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.self.oneOf.1.stat_options","typeLabel":"object | null"},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.self.oneOf.1.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.self.oneOf.1.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.self.oneOf.1.enabled_stats.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.self.oneOf.1.enabled_stats","typeLabel":"enum\u003cstring>[] | null"}},"additionalProperties":false,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.self.oneOf.1","typeLabel":"object"},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.self.oneOf.2","typeLabel":"null"}],"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.self","typeLabel":"object · object · null"},"items":{"oneOf":[{"description":"Configuration for the array item node.","uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.\\items.oneOf.0","typeLabel":"any"},{"type":"null","description":"Configuration for the array item node.","uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.\\items.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.\\items","typeLabel":"any | null"}},"additionalProperties":false,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.3","typeLabel":"object"},{"type":"object","description":"Configuration for the array item node.","required":["items"],"properties":{"items":{"oneOf":[{"description":"Configuration for the array item node.","isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.\\items.oneOf.0","typeLabel":"any"},{"type":"null","description":"Configuration for the array item node.","isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.\\items.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.\\items","typeLabel":"any | null"},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.enabled_stats","typeLabel":"null"},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.stat_options","typeLabel":"null"},"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.self.oneOf.0.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.self.oneOf.0.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.self.oneOf.0.enabled_stats.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.self.oneOf.0.enabled_stats","typeLabel":"enum\u003cstring>[] | null"},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.self.oneOf.0.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.self.oneOf.0.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.self.oneOf.0.stat_options.oneOf.0.histogram","typeLabel":"object"}},"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.self.oneOf.0.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.self.oneOf.0.stat_options.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.self.oneOf.0.stat_options","typeLabel":"object | null"}},"additionalProperties":false,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.self.oneOf.0","typeLabel":"object"},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.self.oneOf.1.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.self.oneOf.1.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.self.oneOf.1.stat_options.oneOf.0.histogram","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.self.oneOf.1.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.self.oneOf.1.stat_options.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.self.oneOf.1.stat_options","typeLabel":"object | null"},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.self.oneOf.1.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.self.oneOf.1.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.self.oneOf.1.enabled_stats.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.self.oneOf.1.enabled_stats","typeLabel":"enum\u003cstring>[] | null"}},"additionalProperties":false,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.self.oneOf.1","typeLabel":"object"},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.self.oneOf.2","typeLabel":"null"}],"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.self","typeLabel":"object · object · null"},"properties":{"oneOf":[{"type":"array","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"},"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.properties.oneOf.0","typeLabel":"array"},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"},"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.properties.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.properties","typeLabel":"array | null"}},"additionalProperties":false,"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.4","typeLabel":"object"},{"type":"null","description":"Configuration for the array item node.","uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items.oneOf.5","typeLabel":"null"}],"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX].\\items","typeLabel":"object · object · object · object · object · null"}},"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0.items.[INDEX]","typeLabel":"object"},"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.0","typeLabel":"object[]"},{"type":"null","description":"Per-field overrides for individual Rosetta Stone attributes.","items":{"type":"object","description":"Common stat configuration shared by dataset and Rosetta Stone field configs. Exactly one of three modes must be used (the server rejects invalid combinations):\n\n1. **Primitive field** — provide enabled_stats and/or stat_options at the top level.\n Must not include self, properties, or items.\n\n2. **Non-primitive field** — provide self, properties, and/or items for nested structure.\n Must not include enabled_stats or stat_options at this level;\n use self for node-level stat configuration instead.\n\n3. **No-op / inherit** — leave all stat fields null or absent. The field inherits its\n configuration from the namespace scope or global defaults.\n\n\nThis schema deliberately has no `oneOf` over the three modes. Mode 3 is all five slots null, which matches neither of the other two, so a closed union here would reject it.\nClosing this schema is left to the two that compose it. `additionalProperties: false` here would only see the properties below, so it would reject the `field_name` and `attribute_name` its siblings contribute; `DatasetFieldConfig` and `RosettaStoneFieldConfig` use `unevaluatedProperties: false`, which sees the whole composition.","required":["attribute_name"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]},"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive field node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Statistics for the non-primitive field node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"null","description":"Statistics for the non-primitive field node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."}]},"properties":{"oneOf":[{"type":"array","description":"Explicit configurations for named child properties of an object field. Only listed children receive stats — unlisted ones are skipped entirely.","minItems":1,"items":{"oneOf":[{"type":"object","description":"Statistics configuration for a named property of an object node. The property may itself be primitive or non-primitive (recursive). A property must carry at least one configuration field — there is no no-op/inherited variant at the nested level. If a property is listed, it must specify what stats to compute. approx_count_distinct and count_distinct are mutually exclusive — the server rejects any request that includes both in the same enabled_stats array.","required":["path","enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"self":{"type":"null","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."},"properties":{"type":"null","description":"Explicit configurations for named child properties of this object property. Only listed children receive stats — unlisted ones are skipped entirely.","minItems":1},"items":{"type":"null","description":"Configuration for the array item node of this array property."},"path":{"type":"string","description":"Name of the child property relative to the parent object node. Must be a valid identifier (alphanumeric and underscores, max 256 chars).","maxLength":256,"pattern":"^[a-zA-Z0-9_]+$"},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Statistics configuration for a named property of an object node. The property may itself be primitive or non-primitive (recursive). A property must carry at least one configuration field — there is no no-op/inherited variant at the nested level. If a property is listed, it must specify what stats to compute. approx_count_distinct and count_distinct are mutually exclusive — the server rejects any request that includes both in the same enabled_stats array.","required":["path","stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"self":{"type":"null","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."},"properties":{"type":"null","description":"Explicit configurations for named child properties of this object property. Only listed children receive stats — unlisted ones are skipped entirely.","minItems":1},"items":{"type":"null","description":"Configuration for the array item node of this array property."},"path":{"type":"string","description":"Name of the child property relative to the parent object node. Must be a valid identifier (alphanumeric and underscores, max 256 chars).","maxLength":256,"pattern":"^[a-zA-Z0-9_]+$"},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"object","description":"Statistics configuration for a named property of an object node. The property may itself be primitive or non-primitive (recursive). A property must carry at least one configuration field — there is no no-op/inherited variant at the nested level. If a property is listed, it must specify what stats to compute. approx_count_distinct and count_distinct are mutually exclusive — the server rejects any request that includes both in the same enabled_stats array.","required":["path","self"],"properties":{"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"null","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."}]},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},"path":{"type":"string","description":"Name of the child property relative to the parent object node. Must be a valid identifier (alphanumeric and underscores, max 256 chars).","maxLength":256,"pattern":"^[a-zA-Z0-9_]+$"},"properties":{"oneOf":[{"type":"array","description":"Explicit configurations for named child properties of this object property. Only listed children receive stats — unlisted ones are skipped entirely.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}},{"type":"null","description":"Explicit configurations for named child properties of this object property. Only listed children receive stats — unlisted ones are skipped entirely.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}}]},"items":{"oneOf":[{"type":"object","description":"Configuration for the array item node of this array property.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"self":{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."},"properties":{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1},"items":{"oneOf":[{"type":"null","description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Configuration for the array item node of this array property.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"self":{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."},"properties":{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1},"items":{"oneOf":[{"type":"null","description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"object","description":"Configuration for the array item node of this array property.","required":["self"],"properties":{"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."}]},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},"properties":{"oneOf":[{"type":"array","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}}]},"items":{"oneOf":[{"description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]}},"additionalProperties":false},{"type":"object","description":"Configuration for the array item node of this array property.","required":["properties"],"properties":{"properties":{"oneOf":[{"type":"array","items":{"oneOf":[{}]},"description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1}]},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."}]},"items":{"oneOf":[{"description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]}},"additionalProperties":false},{"type":"object","description":"Configuration for the array item node of this array property.","required":["items"],"properties":{"items":{"oneOf":[{"description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."}]},"properties":{"oneOf":[{"type":"array","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}}]}},"additionalProperties":false},{"type":"null","description":"Configuration for the array item node of this array property."}]}},"additionalProperties":false},{"type":"object","description":"Statistics configuration for a named property of an object node. The property may itself be primitive or non-primitive (recursive). A property must carry at least one configuration field — there is no no-op/inherited variant at the nested level. If a property is listed, it must specify what stats to compute. approx_count_distinct and count_distinct are mutually exclusive — the server rejects any request that includes both in the same enabled_stats array.","required":["path","properties"],"properties":{"properties":{"oneOf":[{"type":"array","items":{"oneOf":[{}]},"description":"Explicit configurations for named child properties of this object property. Only listed children receive stats — unlisted ones are skipped entirely.","minItems":1},{"type":"null","description":"Explicit configurations for named child properties of this object property. Only listed children receive stats — unlisted ones are skipped entirely.","minItems":1}]},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},"path":{"type":"string","description":"Name of the child property relative to the parent object node. Must be a valid identifier (alphanumeric and underscores, max 256 chars).","maxLength":256,"pattern":"^[a-zA-Z0-9_]+$"},"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"null","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."}]},"items":{"oneOf":[{"type":"object","description":"Configuration for the array item node of this array property.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"self":{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."},"properties":{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1},"items":{"oneOf":[{"type":"null","description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Configuration for the array item node of this array property.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"self":{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."},"properties":{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1},"items":{"oneOf":[{"type":"null","description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"object","description":"Configuration for the array item node of this array property.","required":["self"],"properties":{"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."}]},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},"properties":{"oneOf":[{"type":"array","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}}]},"items":{"oneOf":[{"description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]}},"additionalProperties":false},{"type":"object","description":"Configuration for the array item node of this array property.","required":["properties"],"properties":{"properties":{"oneOf":[{"type":"array","items":{"oneOf":[{}]},"description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1}]},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."}]},"items":{"oneOf":[{"description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]}},"additionalProperties":false},{"type":"object","description":"Configuration for the array item node of this array property.","required":["items"],"properties":{"items":{"oneOf":[{"description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."}]},"properties":{"oneOf":[{"type":"array","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}}]}},"additionalProperties":false},{"type":"null","description":"Configuration for the array item node of this array property."}]}},"additionalProperties":false},{"type":"object","description":"Statistics configuration for a named property of an object node. The property may itself be primitive or non-primitive (recursive). A property must carry at least one configuration field — there is no no-op/inherited variant at the nested level. If a property is listed, it must specify what stats to compute. approx_count_distinct and count_distinct are mutually exclusive — the server rejects any request that includes both in the same enabled_stats array.","required":["path","items"],"properties":{"items":{"oneOf":[{"type":"object","description":"Configuration for the array item node of this array property.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"self":{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."},"properties":{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1},"items":{"oneOf":[{"type":"null","description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Configuration for the array item node of this array property.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"self":{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."},"properties":{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1},"items":{"oneOf":[{"type":"null","description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"object","description":"Configuration for the array item node of this array property.","required":["self"],"properties":{"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."}]},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},"properties":{"oneOf":[{"type":"array","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}}]},"items":{"oneOf":[{"description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]}},"additionalProperties":false},{"type":"object","description":"Configuration for the array item node of this array property.","required":["properties"],"properties":{"properties":{"oneOf":[{"type":"array","items":{"oneOf":[{}]},"description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1}]},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."}]},"items":{"oneOf":[{"description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]}},"additionalProperties":false},{"type":"object","description":"Configuration for the array item node of this array property.","required":["items"],"properties":{"items":{"oneOf":[{"description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."}]},"properties":{"oneOf":[{"type":"array","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}}]}},"additionalProperties":false},{"type":"null","description":"Configuration for the array item node of this array property."}]},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},"path":{"type":"string","description":"Name of the child property relative to the parent object node. Must be a valid identifier (alphanumeric and underscores, max 256 chars).","maxLength":256,"pattern":"^[a-zA-Z0-9_]+$"},"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"null","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."}]},"properties":{"oneOf":[{"type":"array","description":"Explicit configurations for named child properties of this object property. Only listed children receive stats — unlisted ones are skipped entirely.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}},{"type":"null","description":"Explicit configurations for named child properties of this object property. Only listed children receive stats — unlisted ones are skipped entirely.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}}]}},"additionalProperties":false}]}},{"type":"null","description":"Explicit configurations for named child properties of an object field. Only listed children receive stats — unlisted ones are skipped entirely.","minItems":1,"items":{"oneOf":[{"type":"object","description":"Statistics configuration for a named property of an object node. The property may itself be primitive or non-primitive (recursive). A property must carry at least one configuration field — there is no no-op/inherited variant at the nested level. If a property is listed, it must specify what stats to compute. approx_count_distinct and count_distinct are mutually exclusive — the server rejects any request that includes both in the same enabled_stats array.","required":["path","enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"self":{"type":"null","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."},"properties":{"type":"null","description":"Explicit configurations for named child properties of this object property. Only listed children receive stats — unlisted ones are skipped entirely.","minItems":1},"items":{"type":"null","description":"Configuration for the array item node of this array property."},"path":{"type":"string","description":"Name of the child property relative to the parent object node. Must be a valid identifier (alphanumeric and underscores, max 256 chars).","maxLength":256,"pattern":"^[a-zA-Z0-9_]+$"},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Statistics configuration for a named property of an object node. The property may itself be primitive or non-primitive (recursive). A property must carry at least one configuration field — there is no no-op/inherited variant at the nested level. If a property is listed, it must specify what stats to compute. approx_count_distinct and count_distinct are mutually exclusive — the server rejects any request that includes both in the same enabled_stats array.","required":["path","stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"self":{"type":"null","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."},"properties":{"type":"null","description":"Explicit configurations for named child properties of this object property. Only listed children receive stats — unlisted ones are skipped entirely.","minItems":1},"items":{"type":"null","description":"Configuration for the array item node of this array property."},"path":{"type":"string","description":"Name of the child property relative to the parent object node. Must be a valid identifier (alphanumeric and underscores, max 256 chars).","maxLength":256,"pattern":"^[a-zA-Z0-9_]+$"},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"object","description":"Statistics configuration for a named property of an object node. The property may itself be primitive or non-primitive (recursive). A property must carry at least one configuration field — there is no no-op/inherited variant at the nested level. If a property is listed, it must specify what stats to compute. approx_count_distinct and count_distinct are mutually exclusive — the server rejects any request that includes both in the same enabled_stats array.","required":["path","self"],"properties":{"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"null","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."}]},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},"path":{"type":"string","description":"Name of the child property relative to the parent object node. Must be a valid identifier (alphanumeric and underscores, max 256 chars).","maxLength":256,"pattern":"^[a-zA-Z0-9_]+$"},"properties":{"oneOf":[{"type":"array","description":"Explicit configurations for named child properties of this object property. Only listed children receive stats — unlisted ones are skipped entirely.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}},{"type":"null","description":"Explicit configurations for named child properties of this object property. Only listed children receive stats — unlisted ones are skipped entirely.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}}]},"items":{"oneOf":[{"type":"object","description":"Configuration for the array item node of this array property.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"self":{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."},"properties":{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1},"items":{"oneOf":[{"type":"null","description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Configuration for the array item node of this array property.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"self":{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."},"properties":{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1},"items":{"oneOf":[{"type":"null","description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"object","description":"Configuration for the array item node of this array property.","required":["self"],"properties":{"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."}]},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},"properties":{"oneOf":[{"type":"array","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}}]},"items":{"oneOf":[{"description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]}},"additionalProperties":false},{"type":"object","description":"Configuration for the array item node of this array property.","required":["properties"],"properties":{"properties":{"oneOf":[{"type":"array","items":{"oneOf":[{}]},"description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1}]},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."}]},"items":{"oneOf":[{"description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]}},"additionalProperties":false},{"type":"object","description":"Configuration for the array item node of this array property.","required":["items"],"properties":{"items":{"oneOf":[{"description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."}]},"properties":{"oneOf":[{"type":"array","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}}]}},"additionalProperties":false},{"type":"null","description":"Configuration for the array item node of this array property."}]}},"additionalProperties":false},{"type":"object","description":"Statistics configuration for a named property of an object node. The property may itself be primitive or non-primitive (recursive). A property must carry at least one configuration field — there is no no-op/inherited variant at the nested level. If a property is listed, it must specify what stats to compute. approx_count_distinct and count_distinct are mutually exclusive — the server rejects any request that includes both in the same enabled_stats array.","required":["path","properties"],"properties":{"properties":{"oneOf":[{"type":"array","items":{"oneOf":[{}]},"description":"Explicit configurations for named child properties of this object property. Only listed children receive stats — unlisted ones are skipped entirely.","minItems":1},{"type":"null","description":"Explicit configurations for named child properties of this object property. Only listed children receive stats — unlisted ones are skipped entirely.","minItems":1}]},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},"path":{"type":"string","description":"Name of the child property relative to the parent object node. Must be a valid identifier (alphanumeric and underscores, max 256 chars).","maxLength":256,"pattern":"^[a-zA-Z0-9_]+$"},"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"null","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."}]},"items":{"oneOf":[{"type":"object","description":"Configuration for the array item node of this array property.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"self":{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."},"properties":{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1},"items":{"oneOf":[{"type":"null","description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Configuration for the array item node of this array property.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"self":{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."},"properties":{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1},"items":{"oneOf":[{"type":"null","description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"object","description":"Configuration for the array item node of this array property.","required":["self"],"properties":{"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."}]},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},"properties":{"oneOf":[{"type":"array","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}}]},"items":{"oneOf":[{"description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]}},"additionalProperties":false},{"type":"object","description":"Configuration for the array item node of this array property.","required":["properties"],"properties":{"properties":{"oneOf":[{"type":"array","items":{"oneOf":[{}]},"description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1}]},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."}]},"items":{"oneOf":[{"description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]}},"additionalProperties":false},{"type":"object","description":"Configuration for the array item node of this array property.","required":["items"],"properties":{"items":{"oneOf":[{"description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."}]},"properties":{"oneOf":[{"type":"array","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}}]}},"additionalProperties":false},{"type":"null","description":"Configuration for the array item node of this array property."}]}},"additionalProperties":false},{"type":"object","description":"Statistics configuration for a named property of an object node. The property may itself be primitive or non-primitive (recursive). A property must carry at least one configuration field — there is no no-op/inherited variant at the nested level. If a property is listed, it must specify what stats to compute. approx_count_distinct and count_distinct are mutually exclusive — the server rejects any request that includes both in the same enabled_stats array.","required":["path","items"],"properties":{"items":{"oneOf":[{"type":"object","description":"Configuration for the array item node of this array property.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"self":{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."},"properties":{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1},"items":{"oneOf":[{"type":"null","description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Configuration for the array item node of this array property.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"self":{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."},"properties":{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1},"items":{"oneOf":[{"type":"null","description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"object","description":"Configuration for the array item node of this array property.","required":["self"],"properties":{"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."}]},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},"properties":{"oneOf":[{"type":"array","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}}]},"items":{"oneOf":[{"description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]}},"additionalProperties":false},{"type":"object","description":"Configuration for the array item node of this array property.","required":["properties"],"properties":{"properties":{"oneOf":[{"type":"array","items":{"oneOf":[{}]},"description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1}]},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."}]},"items":{"oneOf":[{"description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]}},"additionalProperties":false},{"type":"object","description":"Configuration for the array item node of this array property.","required":["items"],"properties":{"items":{"oneOf":[{"description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."}]},"properties":{"oneOf":[{"type":"array","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}}]}},"additionalProperties":false},{"type":"null","description":"Configuration for the array item node of this array property."}]},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},"path":{"type":"string","description":"Name of the child property relative to the parent object node. Must be a valid identifier (alphanumeric and underscores, max 256 chars).","maxLength":256,"pattern":"^[a-zA-Z0-9_]+$"},"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"null","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."}]},"properties":{"oneOf":[{"type":"array","description":"Explicit configurations for named child properties of this object property. Only listed children receive stats — unlisted ones are skipped entirely.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}},{"type":"null","description":"Explicit configurations for named child properties of this object property. Only listed children receive stats — unlisted ones are skipped entirely.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}}]}},"additionalProperties":false}]}}]},"items":{"oneOf":[{"type":"object","description":"Configuration for the array item node.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"self":{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."},"properties":{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1},"items":{"oneOf":[{"type":"null","description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Configuration for the array item node.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"self":{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."},"properties":{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1},"items":{"oneOf":[{"type":"null","description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"object","description":"Configuration for the array item node.","required":["self"],"properties":{"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."}]},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},"properties":{"oneOf":[{"type":"array","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}}]},"items":{"oneOf":[{"description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]}},"additionalProperties":false},{"type":"object","description":"Configuration for the array item node.","required":["properties"],"properties":{"properties":{"oneOf":[{"type":"array","items":{"oneOf":[{}]},"description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1}]},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."}]},"items":{"oneOf":[{"description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]}},"additionalProperties":false},{"type":"object","description":"Configuration for the array item node.","required":["items"],"properties":{"items":{"oneOf":[{"description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."}]},"properties":{"oneOf":[{"type":"array","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}}]}},"additionalProperties":false},{"type":"null","description":"Configuration for the array item node."}]},"attribute_name":{"type":"string","description":"The Rosetta Stone attribute name (e.g. 'hl7_gender', 'unique_identifier'). Must be a valid identifier (alphanumeric and underscores, max 256 chars).","maxLength":256,"pattern":"^[a-zA-Z0-9_]+$"}}},"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.rosetta_stone.oneOf.0.fields","typeLabel":"object[] | null"}},"additionalProperties":false,"uniqueKey":"configuration.rosetta_stone.oneOf.0","typeLabel":"object"},{"type":"object","description":"Configuration for Rosetta Stone attributes. Use 'scope' to override defaults for all Rosetta Stone fields, or to disable the namespace entirely via enabled_stats: []. Use 'fields' for per-field overrides. Null when the config does not touch this namespace.","required":["fields"],"properties":{"fields":{"oneOf":[{"type":"array","items":{"type":"object","description":"Common stat configuration shared by dataset and Rosetta Stone field configs. Exactly one of three modes must be used (the server rejects invalid combinations):\n\n1. **Primitive field** — provide enabled_stats and/or stat_options at the top level.\n Must not include self, properties, or items.\n\n2. **Non-primitive field** — provide self, properties, and/or items for nested structure.\n Must not include enabled_stats or stat_options at this level;\n use self for node-level stat configuration instead.\n\n3. **No-op / inherit** — leave all stat fields null or absent. The field inherits its\n configuration from the namespace scope or global defaults.\n\n\nThis schema deliberately has no `oneOf` over the three modes. Mode 3 is all five slots null, which matches neither of the other two, so a closed union here would reject it.\nClosing this schema is left to the two that compose it. `additionalProperties: false` here would only see the properties below, so it would reject the `field_name` and `attribute_name` its siblings contribute; `DatasetFieldConfig` and `RosettaStoneFieldConfig` use `unevaluatedProperties: false`, which sees the whole composition.","required":["attribute_name"],"properties":{"attribute_name":{"type":"string","description":"The Rosetta Stone attribute name (e.g. 'hl7_gender', 'unique_identifier'). Must be a valid identifier (alphanumeric and underscores, max 256 chars).","maxLength":256,"pattern":"^[a-zA-Z0-9_]+$","isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].attribute_name","typeLabel":"string"},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].enabled_stats.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].enabled_stats","typeLabel":"enum\u003cstring>[] | null"},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].stat_options.oneOf.0.histogram","typeLabel":"object"}},"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].stat_options.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].stat_options","typeLabel":"object | null"},"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive field node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].self.oneOf.0.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].self.oneOf.0.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].self.oneOf.0.enabled_stats.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].self.oneOf.0.enabled_stats","typeLabel":"enum\u003cstring>[] | null"},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].self.oneOf.0.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].self.oneOf.0.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].self.oneOf.0.stat_options.oneOf.0.histogram","typeLabel":"object"}},"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].self.oneOf.0.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].self.oneOf.0.stat_options.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].self.oneOf.0.stat_options","typeLabel":"object | null"}},"additionalProperties":false,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].self.oneOf.0","typeLabel":"object"},{"type":"object","description":"Statistics for the non-primitive field node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].self.oneOf.1.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].self.oneOf.1.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].self.oneOf.1.stat_options.oneOf.0.histogram","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].self.oneOf.1.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].self.oneOf.1.stat_options.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].self.oneOf.1.stat_options","typeLabel":"object | null"},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].self.oneOf.1.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].self.oneOf.1.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].self.oneOf.1.enabled_stats.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].self.oneOf.1.enabled_stats","typeLabel":"enum\u003cstring>[] | null"}},"additionalProperties":false,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].self.oneOf.1","typeLabel":"object"},{"type":"null","description":"Statistics for the non-primitive field node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].self.oneOf.2","typeLabel":"null"}],"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].self","typeLabel":"object · object · null"},"properties":{"oneOf":[{"type":"array","description":"Explicit configurations for named child properties of an object field. Only listed children receive stats — unlisted ones are skipped entirely.","minItems":1,"items":{"oneOf":[{"type":"object","description":"Statistics configuration for a named property of an object node. The property may itself be primitive or non-primitive (recursive). A property must carry at least one configuration field — there is no no-op/inherited variant at the nested level. If a property is listed, it must specify what stats to compute. approx_count_distinct and count_distinct are mutually exclusive — the server rejects any request that includes both in the same enabled_stats array.","required":["path","enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.0.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.0.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.0.enabled_stats.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.0.enabled_stats","typeLabel":"enum\u003cstring>[] | null"},"path":{"type":"string","description":"Name of the child property relative to the parent object node. Must be a valid identifier (alphanumeric and underscores, max 256 chars).","maxLength":256,"pattern":"^[a-zA-Z0-9_]+$","isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.0.path","typeLabel":"string"},"self":{"type":"null","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.0.self","typeLabel":"null"},"properties":{"type":"null","description":"Explicit configurations for named child properties of this object property. Only listed children receive stats — unlisted ones are skipped entirely.","minItems":1,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.0.properties","typeLabel":"null"},"items":{"type":"null","description":"Configuration for the array item node of this array property.","uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.0.\\items","typeLabel":"null"},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.0.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.0.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.0.stat_options.oneOf.0.histogram","typeLabel":"object"}},"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.0.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.0.stat_options.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.0.stat_options","typeLabel":"object | null"}},"additionalProperties":false,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.0","typeLabel":"object"},{"type":"object","description":"Statistics configuration for a named property of an object node. The property may itself be primitive or non-primitive (recursive). A property must carry at least one configuration field — there is no no-op/inherited variant at the nested level. If a property is listed, it must specify what stats to compute. approx_count_distinct and count_distinct are mutually exclusive — the server rejects any request that includes both in the same enabled_stats array.","required":["path","stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.1.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.1.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.1.stat_options.oneOf.0.histogram","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.1.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.1.stat_options.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.1.stat_options","typeLabel":"object | null"},"path":{"type":"string","description":"Name of the child property relative to the parent object node. Must be a valid identifier (alphanumeric and underscores, max 256 chars).","maxLength":256,"pattern":"^[a-zA-Z0-9_]+$","isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.1.path","typeLabel":"string"},"self":{"type":"null","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.1.self","typeLabel":"null"},"properties":{"type":"null","description":"Explicit configurations for named child properties of this object property. Only listed children receive stats — unlisted ones are skipped entirely.","minItems":1,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.1.properties","typeLabel":"null"},"items":{"type":"null","description":"Configuration for the array item node of this array property.","uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.1.\\items","typeLabel":"null"},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.1.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.1.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.1.enabled_stats.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.1.enabled_stats","typeLabel":"enum\u003cstring>[] | null"}},"additionalProperties":false,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.1","typeLabel":"object"},{"type":"object","description":"Statistics configuration for a named property of an object node. The property may itself be primitive or non-primitive (recursive). A property must carry at least one configuration field — there is no no-op/inherited variant at the nested level. If a property is listed, it must specify what stats to compute. approx_count_distinct and count_distinct are mutually exclusive — the server rejects any request that includes both in the same enabled_stats array.","required":["path","self"],"properties":{"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.self.oneOf.0.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.self.oneOf.0.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.self.oneOf.0.enabled_stats.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.self.oneOf.0.enabled_stats","typeLabel":"enum\u003cstring>[] | null"},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.self.oneOf.0.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.self.oneOf.0.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.self.oneOf.0.stat_options.oneOf.0.histogram","typeLabel":"object"}},"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.self.oneOf.0.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.self.oneOf.0.stat_options.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.self.oneOf.0.stat_options","typeLabel":"object | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.self.oneOf.0","typeLabel":"object"},{"type":"object","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.self.oneOf.1.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.self.oneOf.1.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.self.oneOf.1.stat_options.oneOf.0.histogram","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.self.oneOf.1.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.self.oneOf.1.stat_options.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.self.oneOf.1.stat_options","typeLabel":"object | null"},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.self.oneOf.1.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.self.oneOf.1.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.self.oneOf.1.enabled_stats.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.self.oneOf.1.enabled_stats","typeLabel":"enum\u003cstring>[] | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.self.oneOf.1","typeLabel":"object"},{"type":"null","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.self.oneOf.2","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.self","typeLabel":"object · object · null"},"path":{"type":"string","description":"Name of the child property relative to the parent object node. Must be a valid identifier (alphanumeric and underscores, max 256 chars).","maxLength":256,"pattern":"^[a-zA-Z0-9_]+$","isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.path","typeLabel":"string"},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.enabled_stats","typeLabel":"null"},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.stat_options","typeLabel":"null"},"properties":{"oneOf":[{"type":"array","description":"Explicit configurations for named child properties of this object property. Only listed children receive stats — unlisted ones are skipped entirely.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"},"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.properties.oneOf.0","typeLabel":"array"},{"type":"null","description":"Explicit configurations for named child properties of this object property. Only listed children receive stats — unlisted ones are skipped entirely.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"},"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.properties.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.properties","typeLabel":"array | null"},"items":{"oneOf":[{"type":"object","description":"Configuration for the array item node of this array property.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.0.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.0.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.0.enabled_stats.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.0.enabled_stats","typeLabel":"enum\u003cstring>[] | null"},"self":{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.0.self","typeLabel":"null"},"properties":{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.0.properties","typeLabel":"null"},"items":{"oneOf":[{"type":"null","description":"Configuration for the array item node.","uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.0.\\items.oneOf.0","typeLabel":"null"},{"type":"null","description":"Configuration for the array item node.","uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.0.\\items.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.0.\\items","typeLabel":"null"},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.0.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.0.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.0.stat_options.oneOf.0.histogram","typeLabel":"object"}},"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.0.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.0.stat_options.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.0.stat_options","typeLabel":"object | null"}},"additionalProperties":false,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.0","typeLabel":"object"},{"type":"object","description":"Configuration for the array item node of this array property.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.1.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.1.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.1.stat_options.oneOf.0.histogram","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.1.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.1.stat_options.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.1.stat_options","typeLabel":"object | null"},"self":{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.1.self","typeLabel":"null"},"properties":{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.1.properties","typeLabel":"null"},"items":{"oneOf":[{"type":"null","description":"Configuration for the array item node.","uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.1.\\items.oneOf.0","typeLabel":"null"},{"type":"null","description":"Configuration for the array item node.","uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.1.\\items.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.1.\\items","typeLabel":"null"},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.1.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.1.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.1.enabled_stats.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.1.enabled_stats","typeLabel":"enum\u003cstring>[] | null"}},"additionalProperties":false,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.1","typeLabel":"object"},{"type":"object","description":"Configuration for the array item node of this array property.","required":["self"],"properties":{"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.self.oneOf.0.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.self.oneOf.0.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.self.oneOf.0.enabled_stats.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.self.oneOf.0.enabled_stats","typeLabel":"enum\u003cstring>[] | null"},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.self.oneOf.0.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.self.oneOf.0.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.self.oneOf.0.stat_options.oneOf.0.histogram","typeLabel":"object"}},"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.self.oneOf.0.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.self.oneOf.0.stat_options.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.self.oneOf.0.stat_options","typeLabel":"object | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.self.oneOf.0","typeLabel":"object"},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.self.oneOf.1.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.self.oneOf.1.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.self.oneOf.1.stat_options.oneOf.0.histogram","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.self.oneOf.1.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.self.oneOf.1.stat_options.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.self.oneOf.1.stat_options","typeLabel":"object | null"},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.self.oneOf.1.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.self.oneOf.1.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.self.oneOf.1.enabled_stats.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.self.oneOf.1.enabled_stats","typeLabel":"enum\u003cstring>[] | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.self.oneOf.1","typeLabel":"object"},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.self.oneOf.2","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.self","typeLabel":"object · object · null"},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.enabled_stats","typeLabel":"null"},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.stat_options","typeLabel":"null"},"properties":{"oneOf":[{"type":"array","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"},"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.properties.oneOf.0","typeLabel":"array"},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"},"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.properties.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.properties","typeLabel":"array | null"},"items":{"oneOf":[{"description":"Configuration for the array item node.","uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.\\items.oneOf.0","typeLabel":"any"},{"type":"null","description":"Configuration for the array item node.","uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.\\items.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2.\\items","typeLabel":"any | null"}},"additionalProperties":false,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.2","typeLabel":"object"},{"type":"object","description":"Configuration for the array item node of this array property.","required":["properties"],"properties":{"properties":{"oneOf":[{"type":"array","items":{"oneOf":[{}],"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.properties.oneOf.0.items.[INDEX]","typeLabel":"any"},"description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.properties.oneOf.0","typeLabel":"any[]"},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.properties.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.properties","typeLabel":"any[] | null"},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.enabled_stats","typeLabel":"null"},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.stat_options","typeLabel":"null"},"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.self.oneOf.0.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.self.oneOf.0.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.self.oneOf.0.enabled_stats.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.self.oneOf.0.enabled_stats","typeLabel":"enum\u003cstring>[] | null"},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.self.oneOf.0.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.self.oneOf.0.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.self.oneOf.0.stat_options.oneOf.0.histogram","typeLabel":"object"}},"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.self.oneOf.0.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.self.oneOf.0.stat_options.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.self.oneOf.0.stat_options","typeLabel":"object | null"}},"additionalProperties":false,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.self.oneOf.0","typeLabel":"object"},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.self.oneOf.1.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.self.oneOf.1.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.self.oneOf.1.stat_options.oneOf.0.histogram","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.self.oneOf.1.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.self.oneOf.1.stat_options.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.self.oneOf.1.stat_options","typeLabel":"object | null"},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.self.oneOf.1.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.self.oneOf.1.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.self.oneOf.1.enabled_stats.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.self.oneOf.1.enabled_stats","typeLabel":"enum\u003cstring>[] | null"}},"additionalProperties":false,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.self.oneOf.1","typeLabel":"object"},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.self.oneOf.2","typeLabel":"null"}],"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.self","typeLabel":"object · object · null"},"items":{"oneOf":[{"description":"Configuration for the array item node.","uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.\\items.oneOf.0","typeLabel":"any"},{"type":"null","description":"Configuration for the array item node.","uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.\\items.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3.\\items","typeLabel":"any | null"}},"additionalProperties":false,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.3","typeLabel":"object"},{"type":"object","description":"Configuration for the array item node of this array property.","required":["items"],"properties":{"items":{"oneOf":[{"description":"Configuration for the array item node.","isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.\\items.oneOf.0","typeLabel":"any"},{"type":"null","description":"Configuration for the array item node.","isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.\\items.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.\\items","typeLabel":"any | null"},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.enabled_stats","typeLabel":"null"},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.stat_options","typeLabel":"null"},"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.self.oneOf.0.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.self.oneOf.0.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.self.oneOf.0.enabled_stats.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.self.oneOf.0.enabled_stats","typeLabel":"enum\u003cstring>[] | null"},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.self.oneOf.0.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.self.oneOf.0.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.self.oneOf.0.stat_options.oneOf.0.histogram","typeLabel":"object"}},"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.self.oneOf.0.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.self.oneOf.0.stat_options.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.self.oneOf.0.stat_options","typeLabel":"object | null"}},"additionalProperties":false,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.self.oneOf.0","typeLabel":"object"},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.self.oneOf.1.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.self.oneOf.1.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.self.oneOf.1.stat_options.oneOf.0.histogram","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.self.oneOf.1.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.self.oneOf.1.stat_options.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.self.oneOf.1.stat_options","typeLabel":"object | null"},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.self.oneOf.1.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.self.oneOf.1.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.self.oneOf.1.enabled_stats.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.self.oneOf.1.enabled_stats","typeLabel":"enum\u003cstring>[] | null"}},"additionalProperties":false,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.self.oneOf.1","typeLabel":"object"},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.self.oneOf.2","typeLabel":"null"}],"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.self","typeLabel":"object · object · null"},"properties":{"oneOf":[{"type":"array","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"},"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.properties.oneOf.0","typeLabel":"array"},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"},"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.properties.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4.properties","typeLabel":"array | null"}},"additionalProperties":false,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.4","typeLabel":"object"},{"type":"null","description":"Configuration for the array item node of this array property.","uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items.oneOf.5","typeLabel":"null"}],"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2.\\items","typeLabel":"object · object · object · object · object · null"}},"additionalProperties":false,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.2","typeLabel":"object"},{"type":"object","description":"Statistics configuration for a named property of an object node. The property may itself be primitive or non-primitive (recursive). A property must carry at least one configuration field — there is no no-op/inherited variant at the nested level. If a property is listed, it must specify what stats to compute. approx_count_distinct and count_distinct are mutually exclusive — the server rejects any request that includes both in the same enabled_stats array.","required":["path","properties"],"properties":{"properties":{"oneOf":[{"type":"array","items":{"oneOf":[{}],"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.properties.oneOf.0.items.[INDEX]","typeLabel":"any"},"description":"Explicit configurations for named child properties of this object property. Only listed children receive stats — unlisted ones are skipped entirely.","minItems":1,"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.properties.oneOf.0","typeLabel":"any[]"},{"type":"null","description":"Explicit configurations for named child properties of this object property. Only listed children receive stats — unlisted ones are skipped entirely.","minItems":1,"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.properties.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.properties","typeLabel":"any[] | null"},"path":{"type":"string","description":"Name of the child property relative to the parent object node. Must be a valid identifier (alphanumeric and underscores, max 256 chars).","maxLength":256,"pattern":"^[a-zA-Z0-9_]+$","isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.path","typeLabel":"string"},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.enabled_stats","typeLabel":"null"},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.stat_options","typeLabel":"null"},"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.self.oneOf.0.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.self.oneOf.0.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.self.oneOf.0.enabled_stats.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.self.oneOf.0.enabled_stats","typeLabel":"enum\u003cstring>[] | null"},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.self.oneOf.0.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.self.oneOf.0.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.self.oneOf.0.stat_options.oneOf.0.histogram","typeLabel":"object"}},"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.self.oneOf.0.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.self.oneOf.0.stat_options.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.self.oneOf.0.stat_options","typeLabel":"object | null"}},"additionalProperties":false,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.self.oneOf.0","typeLabel":"object"},{"type":"object","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.self.oneOf.1.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.self.oneOf.1.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.self.oneOf.1.stat_options.oneOf.0.histogram","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.self.oneOf.1.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.self.oneOf.1.stat_options.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.self.oneOf.1.stat_options","typeLabel":"object | null"},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.self.oneOf.1.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.self.oneOf.1.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.self.oneOf.1.enabled_stats.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.self.oneOf.1.enabled_stats","typeLabel":"enum\u003cstring>[] | null"}},"additionalProperties":false,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.self.oneOf.1","typeLabel":"object"},{"type":"null","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.self.oneOf.2","typeLabel":"null"}],"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.self","typeLabel":"object · object · null"},"items":{"oneOf":[{"type":"object","description":"Configuration for the array item node of this array property.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.0.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.0.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.0.enabled_stats.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.0.enabled_stats","typeLabel":"enum\u003cstring>[] | null"},"self":{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.0.self","typeLabel":"null"},"properties":{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.0.properties","typeLabel":"null"},"items":{"oneOf":[{"type":"null","description":"Configuration for the array item node.","uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.0.\\items.oneOf.0","typeLabel":"null"},{"type":"null","description":"Configuration for the array item node.","uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.0.\\items.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.0.\\items","typeLabel":"null"},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.0.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.0.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.0.stat_options.oneOf.0.histogram","typeLabel":"object"}},"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.0.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.0.stat_options.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.0.stat_options","typeLabel":"object | null"}},"additionalProperties":false,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.0","typeLabel":"object"},{"type":"object","description":"Configuration for the array item node of this array property.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.1.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.1.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.1.stat_options.oneOf.0.histogram","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.1.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.1.stat_options.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.1.stat_options","typeLabel":"object | null"},"self":{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.1.self","typeLabel":"null"},"properties":{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.1.properties","typeLabel":"null"},"items":{"oneOf":[{"type":"null","description":"Configuration for the array item node.","uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.1.\\items.oneOf.0","typeLabel":"null"},{"type":"null","description":"Configuration for the array item node.","uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.1.\\items.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.1.\\items","typeLabel":"null"},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.1.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.1.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.1.enabled_stats.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.1.enabled_stats","typeLabel":"enum\u003cstring>[] | null"}},"additionalProperties":false,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.1","typeLabel":"object"},{"type":"object","description":"Configuration for the array item node of this array property.","required":["self"],"properties":{"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.self.oneOf.0.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.self.oneOf.0.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.self.oneOf.0.enabled_stats.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.self.oneOf.0.enabled_stats","typeLabel":"enum\u003cstring>[] | null"},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.self.oneOf.0.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.self.oneOf.0.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.self.oneOf.0.stat_options.oneOf.0.histogram","typeLabel":"object"}},"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.self.oneOf.0.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.self.oneOf.0.stat_options.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.self.oneOf.0.stat_options","typeLabel":"object | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.self.oneOf.0","typeLabel":"object"},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.self.oneOf.1.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.self.oneOf.1.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.self.oneOf.1.stat_options.oneOf.0.histogram","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.self.oneOf.1.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.self.oneOf.1.stat_options.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.self.oneOf.1.stat_options","typeLabel":"object | null"},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.self.oneOf.1.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.self.oneOf.1.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.self.oneOf.1.enabled_stats.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.self.oneOf.1.enabled_stats","typeLabel":"enum\u003cstring>[] | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.self.oneOf.1","typeLabel":"object"},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.self.oneOf.2","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.self","typeLabel":"object · object · null"},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.enabled_stats","typeLabel":"null"},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.stat_options","typeLabel":"null"},"properties":{"oneOf":[{"type":"array","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"},"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.properties.oneOf.0","typeLabel":"array"},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"},"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.properties.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.properties","typeLabel":"array | null"},"items":{"oneOf":[{"description":"Configuration for the array item node.","uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.\\items.oneOf.0","typeLabel":"any"},{"type":"null","description":"Configuration for the array item node.","uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.\\items.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2.\\items","typeLabel":"any | null"}},"additionalProperties":false,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.2","typeLabel":"object"},{"type":"object","description":"Configuration for the array item node of this array property.","required":["properties"],"properties":{"properties":{"oneOf":[{"type":"array","items":{"oneOf":[{}],"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.properties.oneOf.0.items.[INDEX]","typeLabel":"any"},"description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.properties.oneOf.0","typeLabel":"any[]"},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.properties.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.properties","typeLabel":"any[] | null"},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.enabled_stats","typeLabel":"null"},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.stat_options","typeLabel":"null"},"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.self.oneOf.0.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.self.oneOf.0.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.self.oneOf.0.enabled_stats.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.self.oneOf.0.enabled_stats","typeLabel":"enum\u003cstring>[] | null"},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.self.oneOf.0.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.self.oneOf.0.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.self.oneOf.0.stat_options.oneOf.0.histogram","typeLabel":"object"}},"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.self.oneOf.0.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.self.oneOf.0.stat_options.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.self.oneOf.0.stat_options","typeLabel":"object | null"}},"additionalProperties":false,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.self.oneOf.0","typeLabel":"object"},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.self.oneOf.1.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.self.oneOf.1.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.self.oneOf.1.stat_options.oneOf.0.histogram","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.self.oneOf.1.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.self.oneOf.1.stat_options.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.self.oneOf.1.stat_options","typeLabel":"object | null"},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.self.oneOf.1.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.self.oneOf.1.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.self.oneOf.1.enabled_stats.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.self.oneOf.1.enabled_stats","typeLabel":"enum\u003cstring>[] | null"}},"additionalProperties":false,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.self.oneOf.1","typeLabel":"object"},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.self.oneOf.2","typeLabel":"null"}],"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.self","typeLabel":"object · object · null"},"items":{"oneOf":[{"description":"Configuration for the array item node.","uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.\\items.oneOf.0","typeLabel":"any"},{"type":"null","description":"Configuration for the array item node.","uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.\\items.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3.\\items","typeLabel":"any | null"}},"additionalProperties":false,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.3","typeLabel":"object"},{"type":"object","description":"Configuration for the array item node of this array property.","required":["items"],"properties":{"items":{"oneOf":[{"description":"Configuration for the array item node.","isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.\\items.oneOf.0","typeLabel":"any"},{"type":"null","description":"Configuration for the array item node.","isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.\\items.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.\\items","typeLabel":"any | null"},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.enabled_stats","typeLabel":"null"},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.stat_options","typeLabel":"null"},"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.self.oneOf.0.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.self.oneOf.0.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.self.oneOf.0.enabled_stats.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.self.oneOf.0.enabled_stats","typeLabel":"enum\u003cstring>[] | null"},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.self.oneOf.0.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.self.oneOf.0.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.self.oneOf.0.stat_options.oneOf.0.histogram","typeLabel":"object"}},"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.self.oneOf.0.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.self.oneOf.0.stat_options.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.self.oneOf.0.stat_options","typeLabel":"object | null"}},"additionalProperties":false,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.self.oneOf.0","typeLabel":"object"},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.self.oneOf.1.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.self.oneOf.1.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.self.oneOf.1.stat_options.oneOf.0.histogram","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.self.oneOf.1.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.self.oneOf.1.stat_options.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.self.oneOf.1.stat_options","typeLabel":"object | null"},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.self.oneOf.1.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.self.oneOf.1.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.self.oneOf.1.enabled_stats.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.self.oneOf.1.enabled_stats","typeLabel":"enum\u003cstring>[] | null"}},"additionalProperties":false,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.self.oneOf.1","typeLabel":"object"},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.self.oneOf.2","typeLabel":"null"}],"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.self","typeLabel":"object · object · null"},"properties":{"oneOf":[{"type":"array","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"},"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.properties.oneOf.0","typeLabel":"array"},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"},"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.properties.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4.properties","typeLabel":"array | null"}},"additionalProperties":false,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.4","typeLabel":"object"},{"type":"null","description":"Configuration for the array item node of this array property.","uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items.oneOf.5","typeLabel":"null"}],"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3.\\items","typeLabel":"object · object · object · object · object · null"}},"additionalProperties":false,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.3","typeLabel":"object"},{"type":"object","description":"Statistics configuration for a named property of an object node. The property may itself be primitive or non-primitive (recursive). A property must carry at least one configuration field — there is no no-op/inherited variant at the nested level. If a property is listed, it must specify what stats to compute. approx_count_distinct and count_distinct are mutually exclusive — the server rejects any request that includes both in the same enabled_stats array.","required":["path","items"],"properties":{"items":{"oneOf":[{"type":"object","description":"Configuration for the array item node of this array property.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.0.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.0.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.0.enabled_stats.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.0.enabled_stats","typeLabel":"enum\u003cstring>[] | null"},"self":{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.0.self","typeLabel":"null"},"properties":{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.0.properties","typeLabel":"null"},"items":{"oneOf":[{"type":"null","description":"Configuration for the array item node.","uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.0.\\items.oneOf.0","typeLabel":"null"},{"type":"null","description":"Configuration for the array item node.","uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.0.\\items.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.0.\\items","typeLabel":"null"},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.0.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.0.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.0.stat_options.oneOf.0.histogram","typeLabel":"object"}},"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.0.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.0.stat_options.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.0.stat_options","typeLabel":"object | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.0","typeLabel":"object"},{"type":"object","description":"Configuration for the array item node of this array property.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.1.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.1.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.1.stat_options.oneOf.0.histogram","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.1.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.1.stat_options.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.1.stat_options","typeLabel":"object | null"},"self":{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.1.self","typeLabel":"null"},"properties":{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.1.properties","typeLabel":"null"},"items":{"oneOf":[{"type":"null","description":"Configuration for the array item node.","uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.1.\\items.oneOf.0","typeLabel":"null"},{"type":"null","description":"Configuration for the array item node.","uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.1.\\items.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.1.\\items","typeLabel":"null"},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.1.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.1.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.1.enabled_stats.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.1.enabled_stats","typeLabel":"enum\u003cstring>[] | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.1","typeLabel":"object"},{"type":"object","description":"Configuration for the array item node of this array property.","required":["self"],"properties":{"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.self.oneOf.0.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.self.oneOf.0.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.self.oneOf.0.enabled_stats.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.self.oneOf.0.enabled_stats","typeLabel":"enum\u003cstring>[] | null"},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.self.oneOf.0.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.self.oneOf.0.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.self.oneOf.0.stat_options.oneOf.0.histogram","typeLabel":"object"}},"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.self.oneOf.0.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.self.oneOf.0.stat_options.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.self.oneOf.0.stat_options","typeLabel":"object | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.self.oneOf.0","typeLabel":"object"},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.self.oneOf.1.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.self.oneOf.1.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.self.oneOf.1.stat_options.oneOf.0.histogram","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.self.oneOf.1.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.self.oneOf.1.stat_options.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.self.oneOf.1.stat_options","typeLabel":"object | null"},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.self.oneOf.1.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.self.oneOf.1.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.self.oneOf.1.enabled_stats.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.self.oneOf.1.enabled_stats","typeLabel":"enum\u003cstring>[] | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.self.oneOf.1","typeLabel":"object"},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.self.oneOf.2","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.self","typeLabel":"object · object · null"},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.enabled_stats","typeLabel":"null"},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.stat_options","typeLabel":"null"},"properties":{"oneOf":[{"type":"array","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"},"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.properties.oneOf.0","typeLabel":"array"},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"},"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.properties.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.properties","typeLabel":"array | null"},"items":{"oneOf":[{"description":"Configuration for the array item node.","uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.\\items.oneOf.0","typeLabel":"any"},{"type":"null","description":"Configuration for the array item node.","uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.\\items.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2.\\items","typeLabel":"any | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.2","typeLabel":"object"},{"type":"object","description":"Configuration for the array item node of this array property.","required":["properties"],"properties":{"properties":{"oneOf":[{"type":"array","items":{"oneOf":[{}],"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.properties.oneOf.0.items.[INDEX]","typeLabel":"any"},"description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.properties.oneOf.0","typeLabel":"any[]"},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.properties.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.properties","typeLabel":"any[] | null"},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.enabled_stats","typeLabel":"null"},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.stat_options","typeLabel":"null"},"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.self.oneOf.0.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.self.oneOf.0.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.self.oneOf.0.enabled_stats.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.self.oneOf.0.enabled_stats","typeLabel":"enum\u003cstring>[] | null"},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.self.oneOf.0.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.self.oneOf.0.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.self.oneOf.0.stat_options.oneOf.0.histogram","typeLabel":"object"}},"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.self.oneOf.0.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.self.oneOf.0.stat_options.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.self.oneOf.0.stat_options","typeLabel":"object | null"}},"additionalProperties":false,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.self.oneOf.0","typeLabel":"object"},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.self.oneOf.1.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.self.oneOf.1.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.self.oneOf.1.stat_options.oneOf.0.histogram","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.self.oneOf.1.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.self.oneOf.1.stat_options.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.self.oneOf.1.stat_options","typeLabel":"object | null"},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.self.oneOf.1.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.self.oneOf.1.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.self.oneOf.1.enabled_stats.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.self.oneOf.1.enabled_stats","typeLabel":"enum\u003cstring>[] | null"}},"additionalProperties":false,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.self.oneOf.1","typeLabel":"object"},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.self.oneOf.2","typeLabel":"null"}],"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.self","typeLabel":"object · object · null"},"items":{"oneOf":[{"description":"Configuration for the array item node.","uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.\\items.oneOf.0","typeLabel":"any"},{"type":"null","description":"Configuration for the array item node.","uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.\\items.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3.\\items","typeLabel":"any | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.3","typeLabel":"object"},{"type":"object","description":"Configuration for the array item node of this array property.","required":["items"],"properties":{"items":{"oneOf":[{"description":"Configuration for the array item node.","isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.\\items.oneOf.0","typeLabel":"any"},{"type":"null","description":"Configuration for the array item node.","isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.\\items.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.\\items","typeLabel":"any | null"},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.enabled_stats","typeLabel":"null"},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.stat_options","typeLabel":"null"},"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.self.oneOf.0.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.self.oneOf.0.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.self.oneOf.0.enabled_stats.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.self.oneOf.0.enabled_stats","typeLabel":"enum\u003cstring>[] | null"},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.self.oneOf.0.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.self.oneOf.0.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.self.oneOf.0.stat_options.oneOf.0.histogram","typeLabel":"object"}},"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.self.oneOf.0.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.self.oneOf.0.stat_options.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.self.oneOf.0.stat_options","typeLabel":"object | null"}},"additionalProperties":false,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.self.oneOf.0","typeLabel":"object"},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.self.oneOf.1.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.self.oneOf.1.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.self.oneOf.1.stat_options.oneOf.0.histogram","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.self.oneOf.1.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.self.oneOf.1.stat_options.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.self.oneOf.1.stat_options","typeLabel":"object | null"},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.self.oneOf.1.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.self.oneOf.1.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.self.oneOf.1.enabled_stats.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.self.oneOf.1.enabled_stats","typeLabel":"enum\u003cstring>[] | null"}},"additionalProperties":false,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.self.oneOf.1","typeLabel":"object"},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.self.oneOf.2","typeLabel":"null"}],"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.self","typeLabel":"object · object · null"},"properties":{"oneOf":[{"type":"array","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"},"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.properties.oneOf.0","typeLabel":"array"},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"},"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.properties.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4.properties","typeLabel":"array | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.4","typeLabel":"object"},{"type":"null","description":"Configuration for the array item node of this array property.","isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items.oneOf.5","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.\\items","typeLabel":"object · object · object · object · object · null"},"path":{"type":"string","description":"Name of the child property relative to the parent object node. Must be a valid identifier (alphanumeric and underscores, max 256 chars).","maxLength":256,"pattern":"^[a-zA-Z0-9_]+$","isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.path","typeLabel":"string"},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.enabled_stats","typeLabel":"null"},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.stat_options","typeLabel":"null"},"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.self.oneOf.0.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.self.oneOf.0.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.self.oneOf.0.enabled_stats.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.self.oneOf.0.enabled_stats","typeLabel":"enum\u003cstring>[] | null"},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.self.oneOf.0.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.self.oneOf.0.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.self.oneOf.0.stat_options.oneOf.0.histogram","typeLabel":"object"}},"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.self.oneOf.0.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.self.oneOf.0.stat_options.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.self.oneOf.0.stat_options","typeLabel":"object | null"}},"additionalProperties":false,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.self.oneOf.0","typeLabel":"object"},{"type":"object","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.self.oneOf.1.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.self.oneOf.1.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.self.oneOf.1.stat_options.oneOf.0.histogram","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.self.oneOf.1.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.self.oneOf.1.stat_options.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.self.oneOf.1.stat_options","typeLabel":"object | null"},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.self.oneOf.1.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.self.oneOf.1.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.self.oneOf.1.enabled_stats.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.self.oneOf.1.enabled_stats","typeLabel":"enum\u003cstring>[] | null"}},"additionalProperties":false,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.self.oneOf.1","typeLabel":"object"},{"type":"null","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.self.oneOf.2","typeLabel":"null"}],"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.self","typeLabel":"object · object · null"},"properties":{"oneOf":[{"type":"array","description":"Explicit configurations for named child properties of this object property. Only listed children receive stats — unlisted ones are skipped entirely.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"},"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.properties.oneOf.0","typeLabel":"array"},{"type":"null","description":"Explicit configurations for named child properties of this object property. Only listed children receive stats — unlisted ones are skipped entirely.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"},"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.properties.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4.properties","typeLabel":"array | null"}},"additionalProperties":false,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX].oneOf.4","typeLabel":"object"}],"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0.items.[INDEX]","typeLabel":"object"},"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.0","typeLabel":"object[]"},{"type":"null","description":"Explicit configurations for named child properties of an object field. Only listed children receive stats — unlisted ones are skipped entirely.","minItems":1,"items":{"oneOf":[{"type":"object","description":"Statistics configuration for a named property of an object node. The property may itself be primitive or non-primitive (recursive). A property must carry at least one configuration field — there is no no-op/inherited variant at the nested level. If a property is listed, it must specify what stats to compute. approx_count_distinct and count_distinct are mutually exclusive — the server rejects any request that includes both in the same enabled_stats array.","required":["path","enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"self":{"type":"null","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."},"properties":{"type":"null","description":"Explicit configurations for named child properties of this object property. Only listed children receive stats — unlisted ones are skipped entirely.","minItems":1},"items":{"type":"null","description":"Configuration for the array item node of this array property."},"path":{"type":"string","description":"Name of the child property relative to the parent object node. Must be a valid identifier (alphanumeric and underscores, max 256 chars).","maxLength":256,"pattern":"^[a-zA-Z0-9_]+$"},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Statistics configuration for a named property of an object node. The property may itself be primitive or non-primitive (recursive). A property must carry at least one configuration field — there is no no-op/inherited variant at the nested level. If a property is listed, it must specify what stats to compute. approx_count_distinct and count_distinct are mutually exclusive — the server rejects any request that includes both in the same enabled_stats array.","required":["path","stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"self":{"type":"null","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."},"properties":{"type":"null","description":"Explicit configurations for named child properties of this object property. Only listed children receive stats — unlisted ones are skipped entirely.","minItems":1},"items":{"type":"null","description":"Configuration for the array item node of this array property."},"path":{"type":"string","description":"Name of the child property relative to the parent object node. Must be a valid identifier (alphanumeric and underscores, max 256 chars).","maxLength":256,"pattern":"^[a-zA-Z0-9_]+$"},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"object","description":"Statistics configuration for a named property of an object node. The property may itself be primitive or non-primitive (recursive). A property must carry at least one configuration field — there is no no-op/inherited variant at the nested level. If a property is listed, it must specify what stats to compute. approx_count_distinct and count_distinct are mutually exclusive — the server rejects any request that includes both in the same enabled_stats array.","required":["path","self"],"properties":{"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"null","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."}]},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},"path":{"type":"string","description":"Name of the child property relative to the parent object node. Must be a valid identifier (alphanumeric and underscores, max 256 chars).","maxLength":256,"pattern":"^[a-zA-Z0-9_]+$"},"properties":{"oneOf":[{"type":"array","description":"Explicit configurations for named child properties of this object property. Only listed children receive stats — unlisted ones are skipped entirely.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}},{"type":"null","description":"Explicit configurations for named child properties of this object property. Only listed children receive stats — unlisted ones are skipped entirely.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}}]},"items":{"oneOf":[{"type":"object","description":"Configuration for the array item node of this array property.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"self":{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."},"properties":{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1},"items":{"oneOf":[{"type":"null","description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Configuration for the array item node of this array property.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"self":{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."},"properties":{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1},"items":{"oneOf":[{"type":"null","description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"object","description":"Configuration for the array item node of this array property.","required":["self"],"properties":{"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."}]},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},"properties":{"oneOf":[{"type":"array","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}}]},"items":{"oneOf":[{"description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]}},"additionalProperties":false},{"type":"object","description":"Configuration for the array item node of this array property.","required":["properties"],"properties":{"properties":{"oneOf":[{"type":"array","items":{"oneOf":[{}]},"description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1}]},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."}]},"items":{"oneOf":[{"description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]}},"additionalProperties":false},{"type":"object","description":"Configuration for the array item node of this array property.","required":["items"],"properties":{"items":{"oneOf":[{"description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."}]},"properties":{"oneOf":[{"type":"array","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}}]}},"additionalProperties":false},{"type":"null","description":"Configuration for the array item node of this array property."}]}},"additionalProperties":false},{"type":"object","description":"Statistics configuration for a named property of an object node. The property may itself be primitive or non-primitive (recursive). A property must carry at least one configuration field — there is no no-op/inherited variant at the nested level. If a property is listed, it must specify what stats to compute. approx_count_distinct and count_distinct are mutually exclusive — the server rejects any request that includes both in the same enabled_stats array.","required":["path","properties"],"properties":{"properties":{"oneOf":[{"type":"array","items":{"oneOf":[{}]},"description":"Explicit configurations for named child properties of this object property. Only listed children receive stats — unlisted ones are skipped entirely.","minItems":1},{"type":"null","description":"Explicit configurations for named child properties of this object property. Only listed children receive stats — unlisted ones are skipped entirely.","minItems":1}]},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},"path":{"type":"string","description":"Name of the child property relative to the parent object node. Must be a valid identifier (alphanumeric and underscores, max 256 chars).","maxLength":256,"pattern":"^[a-zA-Z0-9_]+$"},"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"null","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."}]},"items":{"oneOf":[{"type":"object","description":"Configuration for the array item node of this array property.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"self":{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."},"properties":{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1},"items":{"oneOf":[{"type":"null","description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Configuration for the array item node of this array property.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"self":{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."},"properties":{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1},"items":{"oneOf":[{"type":"null","description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"object","description":"Configuration for the array item node of this array property.","required":["self"],"properties":{"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."}]},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},"properties":{"oneOf":[{"type":"array","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}}]},"items":{"oneOf":[{"description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]}},"additionalProperties":false},{"type":"object","description":"Configuration for the array item node of this array property.","required":["properties"],"properties":{"properties":{"oneOf":[{"type":"array","items":{"oneOf":[{}]},"description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1}]},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."}]},"items":{"oneOf":[{"description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]}},"additionalProperties":false},{"type":"object","description":"Configuration for the array item node of this array property.","required":["items"],"properties":{"items":{"oneOf":[{"description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."}]},"properties":{"oneOf":[{"type":"array","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}}]}},"additionalProperties":false},{"type":"null","description":"Configuration for the array item node of this array property."}]}},"additionalProperties":false},{"type":"object","description":"Statistics configuration for a named property of an object node. The property may itself be primitive or non-primitive (recursive). A property must carry at least one configuration field — there is no no-op/inherited variant at the nested level. If a property is listed, it must specify what stats to compute. approx_count_distinct and count_distinct are mutually exclusive — the server rejects any request that includes both in the same enabled_stats array.","required":["path","items"],"properties":{"items":{"oneOf":[{"type":"object","description":"Configuration for the array item node of this array property.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"self":{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."},"properties":{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1},"items":{"oneOf":[{"type":"null","description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Configuration for the array item node of this array property.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"self":{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."},"properties":{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1},"items":{"oneOf":[{"type":"null","description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"object","description":"Configuration for the array item node of this array property.","required":["self"],"properties":{"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."}]},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},"properties":{"oneOf":[{"type":"array","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}}]},"items":{"oneOf":[{"description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]}},"additionalProperties":false},{"type":"object","description":"Configuration for the array item node of this array property.","required":["properties"],"properties":{"properties":{"oneOf":[{"type":"array","items":{"oneOf":[{}]},"description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1}]},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."}]},"items":{"oneOf":[{"description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]}},"additionalProperties":false},{"type":"object","description":"Configuration for the array item node of this array property.","required":["items"],"properties":{"items":{"oneOf":[{"description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."}]},"properties":{"oneOf":[{"type":"array","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}}]}},"additionalProperties":false},{"type":"null","description":"Configuration for the array item node of this array property."}]},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},"path":{"type":"string","description":"Name of the child property relative to the parent object node. Must be a valid identifier (alphanumeric and underscores, max 256 chars).","maxLength":256,"pattern":"^[a-zA-Z0-9_]+$"},"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}}}]}},"additionalProperties":false},{"type":"object","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key."}]}},"additionalProperties":false},{"type":"null","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."}]},"properties":{"oneOf":[{"type":"array","description":"Explicit configurations for named child properties of this object property. Only listed children receive stats — unlisted ones are skipped entirely.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}},{"type":"null","description":"Explicit configurations for named child properties of this object property. Only listed children receive stats — unlisted ones are skipped entirely.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"}}]}},"additionalProperties":false}]},"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].properties","typeLabel":"object[] | null"},"items":{"oneOf":[{"type":"object","description":"Configuration for the array item node.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.0.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.0.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.0.enabled_stats.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.0.enabled_stats","typeLabel":"enum\u003cstring>[] | null"},"self":{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.0.self","typeLabel":"null"},"properties":{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.0.properties","typeLabel":"null"},"items":{"oneOf":[{"type":"null","description":"Configuration for the array item node.","uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.0.\\items.oneOf.0","typeLabel":"null"},{"type":"null","description":"Configuration for the array item node.","uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.0.\\items.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.0.\\items","typeLabel":"null"},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.0.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.0.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.0.stat_options.oneOf.0.histogram","typeLabel":"object"}},"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.0.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.0.stat_options.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.0.stat_options","typeLabel":"object | null"}},"additionalProperties":false,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.0","typeLabel":"object"},{"type":"object","description":"Configuration for the array item node.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.1.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.1.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.1.stat_options.oneOf.0.histogram","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.1.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.1.stat_options.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.1.stat_options","typeLabel":"object | null"},"self":{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.1.self","typeLabel":"null"},"properties":{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.1.properties","typeLabel":"null"},"items":{"oneOf":[{"type":"null","description":"Configuration for the array item node.","uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.1.\\items.oneOf.0","typeLabel":"null"},{"type":"null","description":"Configuration for the array item node.","uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.1.\\items.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.1.\\items","typeLabel":"null"},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.1.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.1.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.1.enabled_stats.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.1.enabled_stats","typeLabel":"enum\u003cstring>[] | null"}},"additionalProperties":false,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.1","typeLabel":"object"},{"type":"object","description":"Configuration for the array item node.","required":["self"],"properties":{"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.self.oneOf.0.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.self.oneOf.0.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.self.oneOf.0.enabled_stats.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.self.oneOf.0.enabled_stats","typeLabel":"enum\u003cstring>[] | null"},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.self.oneOf.0.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.self.oneOf.0.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.self.oneOf.0.stat_options.oneOf.0.histogram","typeLabel":"object"}},"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.self.oneOf.0.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.self.oneOf.0.stat_options.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.self.oneOf.0.stat_options","typeLabel":"object | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.self.oneOf.0","typeLabel":"object"},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.self.oneOf.1.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.self.oneOf.1.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.self.oneOf.1.stat_options.oneOf.0.histogram","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.self.oneOf.1.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.self.oneOf.1.stat_options.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.self.oneOf.1.stat_options","typeLabel":"object | null"},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.self.oneOf.1.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.self.oneOf.1.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.self.oneOf.1.enabled_stats.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.self.oneOf.1.enabled_stats","typeLabel":"enum\u003cstring>[] | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.self.oneOf.1","typeLabel":"object"},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.self.oneOf.2","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.self","typeLabel":"object · object · null"},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.enabled_stats","typeLabel":"null"},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.stat_options","typeLabel":"null"},"properties":{"oneOf":[{"type":"array","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"},"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.properties.oneOf.0","typeLabel":"array"},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"},"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.properties.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.properties","typeLabel":"array | null"},"items":{"oneOf":[{"description":"Configuration for the array item node.","uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.\\items.oneOf.0","typeLabel":"any"},{"type":"null","description":"Configuration for the array item node.","uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.\\items.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.2.\\items","typeLabel":"any | null"}},"additionalProperties":false,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.2","typeLabel":"object"},{"type":"object","description":"Configuration for the array item node.","required":["properties"],"properties":{"properties":{"oneOf":[{"type":"array","items":{"oneOf":[{}],"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.properties.oneOf.0.items.[INDEX]","typeLabel":"any"},"description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.properties.oneOf.0","typeLabel":"any[]"},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.properties.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.properties","typeLabel":"any[] | null"},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.enabled_stats","typeLabel":"null"},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.stat_options","typeLabel":"null"},"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.self.oneOf.0.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.self.oneOf.0.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.self.oneOf.0.enabled_stats.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.self.oneOf.0.enabled_stats","typeLabel":"enum\u003cstring>[] | null"},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.self.oneOf.0.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.self.oneOf.0.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.self.oneOf.0.stat_options.oneOf.0.histogram","typeLabel":"object"}},"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.self.oneOf.0.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.self.oneOf.0.stat_options.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.self.oneOf.0.stat_options","typeLabel":"object | null"}},"additionalProperties":false,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.self.oneOf.0","typeLabel":"object"},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.self.oneOf.1.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.self.oneOf.1.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.self.oneOf.1.stat_options.oneOf.0.histogram","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.self.oneOf.1.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.self.oneOf.1.stat_options.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.self.oneOf.1.stat_options","typeLabel":"object | null"},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.self.oneOf.1.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.self.oneOf.1.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.self.oneOf.1.enabled_stats.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.self.oneOf.1.enabled_stats","typeLabel":"enum\u003cstring>[] | null"}},"additionalProperties":false,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.self.oneOf.1","typeLabel":"object"},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.self.oneOf.2","typeLabel":"null"}],"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.self","typeLabel":"object · object · null"},"items":{"oneOf":[{"description":"Configuration for the array item node.","uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.\\items.oneOf.0","typeLabel":"any"},{"type":"null","description":"Configuration for the array item node.","uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.\\items.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.3.\\items","typeLabel":"any | null"}},"additionalProperties":false,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.3","typeLabel":"object"},{"type":"object","description":"Configuration for the array item node.","required":["items"],"properties":{"items":{"oneOf":[{"description":"Configuration for the array item node.","isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.\\items.oneOf.0","typeLabel":"any"},{"type":"null","description":"Configuration for the array item node.","isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.\\items.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.\\items","typeLabel":"any | null"},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.enabled_stats","typeLabel":"null"},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.stat_options","typeLabel":"null"},"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.self.oneOf.0.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.self.oneOf.0.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.self.oneOf.0.enabled_stats.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.self.oneOf.0.enabled_stats","typeLabel":"enum\u003cstring>[] | null"},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.self.oneOf.0.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.self.oneOf.0.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.self.oneOf.0.stat_options.oneOf.0.histogram","typeLabel":"object"}},"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.self.oneOf.0.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.self.oneOf.0.stat_options.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.self.oneOf.0.stat_options","typeLabel":"object | null"}},"additionalProperties":false,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.self.oneOf.0","typeLabel":"object"},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.self.oneOf.1.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.self.oneOf.1.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.self.oneOf.1.stat_options.oneOf.0.histogram","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.self.oneOf.1.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.self.oneOf.1.stat_options.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.self.oneOf.1.stat_options","typeLabel":"object | null"},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.self.oneOf.1.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.self.oneOf.1.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.self.oneOf.1.enabled_stats.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.self.oneOf.1.enabled_stats","typeLabel":"enum\u003cstring>[] | null"}},"additionalProperties":false,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.self.oneOf.1","typeLabel":"object"},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.self.oneOf.2","typeLabel":"null"}],"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.self","typeLabel":"object · object · null"},"properties":{"oneOf":[{"type":"array","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"},"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.properties.oneOf.0","typeLabel":"array"},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"items":{"$circularRef":"fb1be320-811c-4f72-a778-5a34f35d47db"},"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.properties.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.4.properties","typeLabel":"array | null"}},"additionalProperties":false,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.4","typeLabel":"object"},{"type":"null","description":"Configuration for the array item node.","uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items.oneOf.5","typeLabel":"null"}],"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX].\\items","typeLabel":"object · object · object · object · object · null"}},"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0.items.[INDEX]","typeLabel":"object"},"description":"Per-field overrides for individual Rosetta Stone attributes.","isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.0","typeLabel":"object[]"},{"type":"null","description":"Per-field overrides for individual Rosetta Stone attributes.","isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.1.fields","typeLabel":"object[] | null"},"scope":{"oneOf":[{"type":"object","description":"A stat selection with optional per-stat configuration. At least one of enabled_stats or stat_options must be provided. An empty enabled_stats array explicitly disables all stats for this scope. approx_count_distinct and count_distinct are mutually exclusive — the server rejects any request that includes both in the same enabled_stats array.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"configuration.rosetta_stone.oneOf.1.scope.oneOf.0.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.1.scope.oneOf.0.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.1.scope.oneOf.0.enabled_stats.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.1.scope.oneOf.0.enabled_stats","typeLabel":"enum\u003cstring>[] | null"},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"configuration.rosetta_stone.oneOf.1.scope.oneOf.0.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"configuration.rosetta_stone.oneOf.1.scope.oneOf.0.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"configuration.rosetta_stone.oneOf.1.scope.oneOf.0.stat_options.oneOf.0.histogram","typeLabel":"object"}},"uniqueKey":"configuration.rosetta_stone.oneOf.1.scope.oneOf.0.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","additionalProperties":false,"properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"uniqueKey":"configuration.rosetta_stone.oneOf.1.scope.oneOf.0.stat_options.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.rosetta_stone.oneOf.1.scope.oneOf.0.stat_options","typeLabel":"object | null"}},"additionalProperties":false,"uniqueKey":"configuration.rosetta_stone.oneOf.1.scope.oneOf.0","typeLabel":"object"},{"type":"object","description":"A stat selection with optional per-stat configuration. At least one of enabled_stats or stat_options must be provided. An empty enabled_stats array explicitly disables all stats for this scope. approx_count_distinct and count_distinct are mutually exclusive — the server rejects any request that includes both in the same enabled_stats array.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution.","uniqueKey":"configuration.rosetta_stone.oneOf.1.scope.oneOf.1.stat_options.oneOf.0.histogram.max_bins","typeLabel":"integer"},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin.","uniqueKey":"configuration.rosetta_stone.oneOf.1.scope.oneOf.1.stat_options.oneOf.0.histogram.overflow","typeLabel":"enum\u003cstring>"}},"uniqueKey":"configuration.rosetta_stone.oneOf.1.scope.oneOf.1.stat_options.oneOf.0.histogram","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.1.scope.oneOf.1.stat_options.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.1.scope.oneOf.1.stat_options.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"configuration.rosetta_stone.oneOf.1.scope.oneOf.1.stat_options","typeLabel":"object | null"},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic.","uniqueKey":"configuration.rosetta_stone.oneOf.1.scope.oneOf.1.enabled_stats.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"configuration.rosetta_stone.oneOf.1.scope.oneOf.1.enabled_stats.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"uniqueItems":true,"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueKey":"configuration.rosetta_stone.oneOf.1.scope.oneOf.1.enabled_stats.oneOf.1","typeLabel":"null"}],"uniqueKey":"configuration.rosetta_stone.oneOf.1.scope.oneOf.1.enabled_stats","typeLabel":"enum\u003cstring>[] | null"}},"additionalProperties":false,"uniqueKey":"configuration.rosetta_stone.oneOf.1.scope.oneOf.1","typeLabel":"object"},{"type":"null","uniqueKey":"configuration.rosetta_stone.oneOf.1.scope.oneOf.2","typeLabel":"null"}],"uniqueKey":"configuration.rosetta_stone.oneOf.1.scope","typeLabel":"object · object · null"}},"additionalProperties":false,"uniqueKey":"configuration.rosetta_stone.oneOf.1","typeLabel":"object"},{"type":"null","description":"Configuration for Rosetta Stone attributes. Use 'scope' to override defaults for all Rosetta Stone fields, or to disable the namespace entirely via enabled_stats: []. Use 'fields' for per-field overrides. Null when the config does not touch this namespace.","uniqueKey":"configuration.rosetta_stone.oneOf.2","typeLabel":"null"}],"uniqueKey":"configuration.rosetta_stone","typeLabel":"object · object · null"}},"isRequired":true,"uniqueKey":"configuration","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"id":"3c90c3cc-0d44-4b50-8888-8dd25736052a","dataset_id":123,"version":123,"created_at":"2023-11-07T05:31:56Z","created_by":123,"configuration":{"defaults":{"enabled_stats":["value_count"],"stat_options":{"histogram":{"max_bins":50,"overflow":"none"}}},"refresh":{"trigger":"cron","cron_expression":"\u003cstring>"},"dataset":{"scope":{"enabled_stats":["value_count"],"stat_options":{"histogram":{"max_bins":50,"overflow":"none"}}},"fields":[{"field_name":"\u003cstring>","enabled_stats":["value_count"],"stat_options":{"histogram":{"max_bins":50,"overflow":"none"}},"self":{"enabled_stats":["value_count"],"stat_options":{"histogram":{"max_bins":50,"overflow":"none"}}},"properties":[{"enabled_stats":["value_count"],"path":"\u003cstring>","self":null,"properties":null,"items":null,"stat_options":{"histogram":{"max_bins":50,"overflow":"none"}}}],"items":{"enabled_stats":["value_count"],"self":null,"properties":null,"items":null,"stat_options":{"histogram":{"max_bins":50,"overflow":"none"}}}}]},"rosetta_stone":{"scope":{"enabled_stats":["value_count"],"stat_options":{"histogram":{"max_bins":50,"overflow":"none"}}},"fields":[{"attribute_name":"\u003cstring>","enabled_stats":["value_count"],"stat_options":{"histogram":{"max_bins":50,"overflow":"none"}},"self":{"enabled_stats":["value_count"],"stat_options":{"histogram":{"max_bins":50,"overflow":"none"}}},"properties":[{"enabled_stats":["value_count"],"path":"\u003cstring>","self":null,"properties":null,"items":null,"stat_options":{"histogram":{"max_bins":50,"overflow":"none"}}}],"items":{"enabled_stats":["value_count"],"self":null,"properties":null,"items":null,"stat_options":{"histogram":{"max_bins":50,"overflow":"none"}}}}]}}}}},"exampleType":"generated"}},"exampleType":"generated"}},"security":{"3ff41679-d879-41a8-ad77-b2b89c47346d":{"BearerAuth":{"type":"http","scheme":"bearer","scopes":[],"schemeName":"BearerAuth"}}},"servers":{"f5cdb00a-7cd2-403b-b56f-64a8355e9e84":{"url":"https://api-dev.narrative.io"},"dce399bf-7abb-458f-baf7-1fe589b6e908":{"url":"https://api.narrative.io"}},"schemas":{"fb1be320-811c-4f72-a778-5a34f35d47db":{"oneOf":[{"type":"object","description":"Statistics configuration for a named property of an object node. The property may itself be primitive or non-primitive (recursive). A property must carry at least one configuration field — there is no no-op/inherited variant at the nested level. If a property is listed, it must specify what stats to compute. approx_count_distinct and count_distinct are mutually exclusive — the server rejects any request that includes both in the same enabled_stats array.","required":["path","enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true}],"isRequired":true},"path":{"type":"string","description":"Name of the child property relative to the parent object node. Must be a valid identifier (alphanumeric and underscores, max 256 chars).","maxLength":256,"pattern":"^[a-zA-Z0-9_]+$","isRequired":true},"self":{"type":"null","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."},"properties":{"type":"null","description":"Explicit configurations for named child properties of this object property. Only listed children receive stats — unlisted ones are skipped entirely.","minItems":1},"items":{"type":"null","description":"Configuration for the array item node of this array property."},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]}},"additionalProperties":false},{"type":"object","description":"Statistics configuration for a named property of an object node. The property may itself be primitive or non-primitive (recursive). A property must carry at least one configuration field — there is no no-op/inherited variant at the nested level. If a property is listed, it must specify what stats to compute. approx_count_distinct and count_distinct are mutually exclusive — the server rejects any request that includes both in the same enabled_stats array.","required":["path","stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"isRequired":true},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"isRequired":true}],"isRequired":true},"path":{"type":"string","description":"Name of the child property relative to the parent object node. Must be a valid identifier (alphanumeric and underscores, max 256 chars).","maxLength":256,"pattern":"^[a-zA-Z0-9_]+$","isRequired":true},"self":{"type":"null","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."},"properties":{"type":"null","description":"Explicit configurations for named child properties of this object property. Only listed children receive stats — unlisted ones are skipped entirely.","minItems":1},"items":{"type":"null","description":"Configuration for the array item node of this array property."},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]}},"additionalProperties":false},{"type":"object","description":"Statistics configuration for a named property of an object node. The property may itself be primitive or non-primitive (recursive). A property must carry at least one configuration field — there is no no-op/inherited variant at the nested level. If a property is listed, it must specify what stats to compute. approx_count_distinct and count_distinct are mutually exclusive — the server rejects any request that includes both in the same enabled_stats array.","required":["path","self"],"properties":{"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true}],"isRequired":true},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]}},"additionalProperties":false,"isRequired":true},{"type":"object","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"isRequired":true},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"isRequired":true}],"isRequired":true},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]}},"additionalProperties":false,"isRequired":true},{"type":"null","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","isRequired":true}],"isRequired":true},"path":{"type":"string","description":"Name of the child property relative to the parent object node. Must be a valid identifier (alphanumeric and underscores, max 256 chars).","maxLength":256,"pattern":"^[a-zA-Z0-9_]+$","isRequired":true},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},"properties":{"oneOf":[{"type":"array","items":{"oneOf":[{}]},"description":"Explicit configurations for named child properties of this object property. Only listed children receive stats — unlisted ones are skipped entirely.","minItems":1},{"type":"null","description":"Explicit configurations for named child properties of this object property. Only listed children receive stats — unlisted ones are skipped entirely.","minItems":1}]},"items":{"oneOf":[{"type":"object","description":"Configuration for the array item node of this array property.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true}],"isRequired":true},"self":{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."},"properties":{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1},"items":{"oneOf":[{"type":"null","description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]}},"additionalProperties":false},{"type":"object","description":"Configuration for the array item node of this array property.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"isRequired":true},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"isRequired":true}],"isRequired":true},"self":{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."},"properties":{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1},"items":{"oneOf":[{"type":"null","description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]}},"additionalProperties":false},{"type":"object","description":"Configuration for the array item node of this array property.","required":["self"],"properties":{"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true}],"isRequired":true},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]}},"additionalProperties":false,"isRequired":true},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"isRequired":true},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"isRequired":true}],"isRequired":true},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]}},"additionalProperties":false,"isRequired":true},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","isRequired":true}],"isRequired":true},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},"properties":{"oneOf":[{"type":"array","items":{"oneOf":[{}]},"description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1}]},"items":{"oneOf":[{"description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]}},"additionalProperties":false},{"type":"object","description":"Configuration for the array item node of this array property.","required":["properties"],"properties":{"properties":{"oneOf":[{"type":"array","items":{"oneOf":[{}]},"description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"isRequired":true},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"isRequired":true}],"isRequired":true},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true}],"isRequired":true},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]}},"additionalProperties":false},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"isRequired":true},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"isRequired":true}],"isRequired":true},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]}},"additionalProperties":false},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."}]},"items":{"oneOf":[{"description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]}},"additionalProperties":false},{"type":"object","description":"Configuration for the array item node of this array property.","required":["items"],"properties":{"items":{"oneOf":[{"description":"Configuration for the array item node.","isRequired":true},{"type":"null","description":"Configuration for the array item node.","isRequired":true}],"isRequired":true},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true}],"isRequired":true},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]}},"additionalProperties":false},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"isRequired":true},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"isRequired":true}],"isRequired":true},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]}},"additionalProperties":false},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."}]},"properties":{"oneOf":[{"type":"array","items":{"oneOf":[{}]},"description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1}]}},"additionalProperties":false},{"type":"null","description":"Configuration for the array item node of this array property."}]}},"additionalProperties":false},{"type":"object","description":"Statistics configuration for a named property of an object node. The property may itself be primitive or non-primitive (recursive). A property must carry at least one configuration field — there is no no-op/inherited variant at the nested level. If a property is listed, it must specify what stats to compute. approx_count_distinct and count_distinct are mutually exclusive — the server rejects any request that includes both in the same enabled_stats array.","required":["path","properties"],"properties":{"properties":{"oneOf":[{"type":"array","items":{"oneOf":[{}]},"description":"Explicit configurations for named child properties of this object property. Only listed children receive stats — unlisted ones are skipped entirely.","minItems":1,"isRequired":true},{"type":"null","description":"Explicit configurations for named child properties of this object property. Only listed children receive stats — unlisted ones are skipped entirely.","minItems":1,"isRequired":true}],"isRequired":true},"path":{"type":"string","description":"Name of the child property relative to the parent object node. Must be a valid identifier (alphanumeric and underscores, max 256 chars).","maxLength":256,"pattern":"^[a-zA-Z0-9_]+$","isRequired":true},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true}],"isRequired":true},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]}},"additionalProperties":false},{"type":"object","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"isRequired":true},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"isRequired":true}],"isRequired":true},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]}},"additionalProperties":false},{"type":"null","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."}]},"items":{"oneOf":[{"type":"object","description":"Configuration for the array item node of this array property.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true}],"isRequired":true},"self":{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."},"properties":{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1},"items":{"oneOf":[{"type":"null","description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]}},"additionalProperties":false},{"type":"object","description":"Configuration for the array item node of this array property.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"isRequired":true},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"isRequired":true}],"isRequired":true},"self":{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."},"properties":{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1},"items":{"oneOf":[{"type":"null","description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]}},"additionalProperties":false},{"type":"object","description":"Configuration for the array item node of this array property.","required":["self"],"properties":{"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true}],"isRequired":true},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]}},"additionalProperties":false,"isRequired":true},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"isRequired":true},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"isRequired":true}],"isRequired":true},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]}},"additionalProperties":false,"isRequired":true},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","isRequired":true}],"isRequired":true},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},"properties":{"oneOf":[{"type":"array","items":{"oneOf":[{}]},"description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1}]},"items":{"oneOf":[{"description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]}},"additionalProperties":false},{"type":"object","description":"Configuration for the array item node of this array property.","required":["properties"],"properties":{"properties":{"oneOf":[{"type":"array","items":{"oneOf":[{}]},"description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"isRequired":true},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"isRequired":true}],"isRequired":true},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true}],"isRequired":true},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]}},"additionalProperties":false},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"isRequired":true},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"isRequired":true}],"isRequired":true},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]}},"additionalProperties":false},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."}]},"items":{"oneOf":[{"description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]}},"additionalProperties":false},{"type":"object","description":"Configuration for the array item node of this array property.","required":["items"],"properties":{"items":{"oneOf":[{"description":"Configuration for the array item node.","isRequired":true},{"type":"null","description":"Configuration for the array item node.","isRequired":true}],"isRequired":true},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true}],"isRequired":true},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]}},"additionalProperties":false},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"isRequired":true},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"isRequired":true}],"isRequired":true},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]}},"additionalProperties":false},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."}]},"properties":{"oneOf":[{"type":"array","items":{"oneOf":[{}]},"description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1}]}},"additionalProperties":false},{"type":"null","description":"Configuration for the array item node of this array property."}]}},"additionalProperties":false},{"type":"object","description":"Statistics configuration for a named property of an object node. The property may itself be primitive or non-primitive (recursive). A property must carry at least one configuration field — there is no no-op/inherited variant at the nested level. If a property is listed, it must specify what stats to compute. approx_count_distinct and count_distinct are mutually exclusive — the server rejects any request that includes both in the same enabled_stats array.","required":["path","items"],"properties":{"items":{"oneOf":[{"type":"object","description":"Configuration for the array item node of this array property.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true}],"isRequired":true},"self":{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."},"properties":{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1},"items":{"oneOf":[{"type":"null","description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]}},"additionalProperties":false,"isRequired":true},{"type":"object","description":"Configuration for the array item node of this array property.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"isRequired":true},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"isRequired":true}],"isRequired":true},"self":{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."},"properties":{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1},"items":{"oneOf":[{"type":"null","description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]}},"additionalProperties":false,"isRequired":true},{"type":"object","description":"Configuration for the array item node of this array property.","required":["self"],"properties":{"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true}],"isRequired":true},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]}},"additionalProperties":false,"isRequired":true},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"isRequired":true},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"isRequired":true}],"isRequired":true},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]}},"additionalProperties":false,"isRequired":true},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","isRequired":true}],"isRequired":true},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},"properties":{"oneOf":[{"type":"array","items":{"oneOf":[{}]},"description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1}]},"items":{"oneOf":[{"description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]}},"additionalProperties":false,"isRequired":true},{"type":"object","description":"Configuration for the array item node of this array property.","required":["properties"],"properties":{"properties":{"oneOf":[{"type":"array","items":{"oneOf":[{}]},"description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"isRequired":true},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1,"isRequired":true}],"isRequired":true},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true}],"isRequired":true},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]}},"additionalProperties":false},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"isRequired":true},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"isRequired":true}],"isRequired":true},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]}},"additionalProperties":false},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."}]},"items":{"oneOf":[{"description":"Configuration for the array item node."},{"type":"null","description":"Configuration for the array item node."}]}},"additionalProperties":false,"isRequired":true},{"type":"object","description":"Configuration for the array item node of this array property.","required":["items"],"properties":{"items":{"oneOf":[{"description":"Configuration for the array item node.","isRequired":true},{"type":"null","description":"Configuration for the array item node.","isRequired":true}],"isRequired":true},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true}],"isRequired":true},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]}},"additionalProperties":false},{"type":"object","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"isRequired":true},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"isRequired":true}],"isRequired":true},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]}},"additionalProperties":false},{"type":"null","description":"Statistics for the non-primitive node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."}]},"properties":{"oneOf":[{"type":"array","items":{"oneOf":[{}]},"description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1},{"type":"null","description":"Explicit configurations for named child properties of an object node. Only properties listed here receive stats — unlisted children are skipped entirely (they do NOT inherit from any parent level). This is by design: stat selection for struct children is opt-in, not opt-out.","minItems":1}]}},"additionalProperties":false,"isRequired":true},{"type":"null","description":"Configuration for the array item node of this array property.","isRequired":true}],"isRequired":true},"path":{"type":"string","description":"Name of the child property relative to the parent object node. Must be a valid identifier (alphanumeric and underscores, max 256 chars).","maxLength":256,"pattern":"^[a-zA-Z0-9_]+$","isRequired":true},"enabled_stats":{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},"stat_options":{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},"self":{"oneOf":[{"type":"object","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["enabled_stats"],"properties":{"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true,"isRequired":true}],"isRequired":true},"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false}]}},"additionalProperties":false},{"type":"object","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL.","required":["stat_options"],"properties":{"stat_options":{"oneOf":[{"type":"object","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"isRequired":true},{"type":"null","description":"Per-stat tuning parameters. Extensible as new stat options are introduced. Null means this level sets no options and inherits them.\n\n## Histogram options and enabled_stats interaction\nHistogram options (`stat_options.histogram`) require that the `histogram` stat is present in the **resolved** stat set. There are exactly two valid ways to provide histogram options:\n1. **With enabled_stats that includes `histogram`** — the stat set is explicit, and options\n tune the histogram directly.\n Example: `{ \"enabled_stats\": [\"value_count\", \"histogram\"], \"stat_options\": { \"histogram\": { \"max_bins\": 200 } } }`\n\n2. **Without enabled_stats (stat_options only)** — the stat set is inherited from the parent\n level (namespace scope → defaults). The parent's stat set **must** include `histogram`;\n otherwise the server rejects the request with a validation error.\n Example: defaults enable `histogram`. A field provides only\n `{ \"stat_options\": { \"histogram\": { \"max_bins\": 500 } } }` — valid because `histogram`\n is inherited from defaults.\n\nProviding histogram options when `enabled_stats` is present but does **not** include `histogram` is always an error — there is no implicit enabling of stats via options.\n\n## Per-property inheritance within stat_options\nWhen stat_options is provided without enabled_stats (at scope, field, or nested levels), the stat set is inherited from the parent level and only the specified option properties are overridden. Individual option properties not explicitly set retain their value from the **resolved parent** — not from server defaults. For example, if scope overrides `max_bins` to 200 and a field provides only `overflow: truncate`, the field gets `max_bins: 200` from scope (not the server default of 50) and `overflow: truncate` from its own override.","properties":{"histogram":{"type":"object","additionalProperties":false,"description":"Tuning parameters for the histogram statistic. Each property is independently optional and follows per-property inheritance: when a child scope provides histogram options, only the properties it explicitly sets are overridden. Unspecified properties keep the value resolved from the parent level (namespace scope, defaults, or server defaults of max_bins=50 and overflow=none).","properties":{"max_bins":{"type":"integer","minimum":2,"maximum":100000,"default":50,"description":"Maximum number of bins in the frequency distribution."},"overflow":{"type":"string","enum":["none","truncate"],"default":"none","description":"Behavior when cardinality exceeds max_bins. 'none' (default): skip the histogram entirely. 'truncate': keep the top N-1 bins by frequency and roll everything else into an 'Other Values' bin."}}}},"additionalProperties":false,"isRequired":true}],"isRequired":true},"enabled_stats":{"oneOf":[{"type":"array","items":{"type":"string","enum":["value_count","null_value_count","nan_value_count","lower_bound","upper_bound","approx_count_distinct","count_distinct","histogram","mean","standard_deviation","completeness"],"description":"Identifier for a supported statistic."},"description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true},{"type":"null","description":"Statistics to compute. An empty array explicitly disables all stats for this scope. Server filters type-incompatible stats.\n\nNull and an empty array are different: null means this level says nothing about the stat set and inherits it, `[]` means compute nothing here. The encoder writes null for every slot the config does not use, so a node that selects stats through `self`/`properties`/`items` carries `\"enabled_stats\": null` rather than omitting the key.","uniqueItems":true}]}},"additionalProperties":false},{"type":"null","description":"Statistics for the non-primitive property node itself (the struct/array column). Only `null_value_count` is currently supported — other stats are rejected. Use this to count rows where the entire container value is NULL."}]},"properties":{"oneOf":[{"type":"array","items":{"oneOf":[{}]},"description":"Explicit configurations for named child properties of this object property. Only listed children receive stats — unlisted ones are skipped entirely.","minItems":1},{"type":"null","description":"Explicit configurations for named child properties of this object property. Only listed children receive stats — unlisted ones are skipped entirely.","minItems":1}]}},"additionalProperties":false}]}},"processedSecurityOptions":[{"schemes":[{"scheme":{"type":"http","scheme":"bearer","scopes":[],"schemeName":"BearerAuth"},"schema":{"title":"Bearer Auth","type":"string","isRequired":true,"description":"Bearer authentication header of the form `Bearer \u003ctoken>`, where `\u003ctoken>` is your auth token.","format":"bearer","typeLabel":"string\u003cbearer>","deprecated":false},"schemeName":"BearerAuth","name":"Authorization"}],"title":"BearerAuth"}]},"originalFileLocation":"https://docs-cdn.narrative.io/api-reference/main/openapi.json"},"subdomain":"narrative-07c7a1f7","siteName":"Narrative I/O Knowledge Base","title":"Put Statistics Configuration - Narrative I/O Knowledge Base","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-11-03T10:12:47.447Z","originalFileLocation":"api-reference/dataset-statistics/put-statistics-configuration.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Create or update the statistics configuration for a dataset. Replaces any existing configuration.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Narrative I/O Knowledge Base\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/narrative-07c7a1f7/OOk68seBU2ePTAv6/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/narrative-07c7a1f7/OOk68seBU2ePTAv6/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/narrative-07c7a1f7/OOk68seBU2ePTAv6/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/narrative-07c7a1f7/OOk68seBU2ePTAv6/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/narrative-07c7a1f7/OOk68seBU2ePTAv6/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/narrative-07c7a1f7/OOk68seBU2ePTAv6/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/narrative-07c7a1f7/OOk68seBU2ePTAv6/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/narrative-07c7a1f7/OOk68seBU2ePTAv6/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/narrative-07c7a1f7/OOk68seBU2ePTAv6/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Put Statistics Configuration - Narrative I/O Knowledge Base\">\u003cmeta data-mint-head property=\"og:description\" content=\"Create or update the statistics configuration for a dataset. Replaces any existing configuration.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Narrative I/O Knowledge Base\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.narrative.io/api-reference/dataset-statistics/put-statistics-configuration\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://narrative-07c7a1f7.mintlify.app/_mintlify/api/og/v2?division=Dataset+Statistics\u0026amp;title=Put+Statistics+Configuration\u0026amp;description=Create+or+update+the+statistics+configuration+for+a+dataset.+Replaces+any+existing+configuration.\u0026amp;theme=ee973f81a9436b7406ccdb45\u0026amp;signature=db46887fa4b4bde38346374e5dfb9939e3f7c94845c583d752d27644fb80f071\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Put Statistics Configuration - Narrative I/O Knowledge Base\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Create or update the statistics configuration for a dataset. Replaces any existing configuration.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://narrative-07c7a1f7.mintlify.app/_mintlify/api/og/v2?division=Dataset+Statistics\u0026amp;title=Put+Statistics+Configuration\u0026amp;description=Create+or+update+the+statistics+configuration+for+a+dataset.+Replaces+any+existing+configuration.\u0026amp;theme=ee973f81a9436b7406ccdb45\u0026amp;signature=db46887fa4b4bde38346374e5dfb9939e3f7c94845c583d752d27644fb80f071\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/narrative-07c7a1f7/OOk68seBU2ePTAv6/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Narrative I/O Knowledge Base\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#1438F5\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.narrative.io/api-reference/dataset-statistics/put-statistics-configuration\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/api-reference/dataset-statistics/put-statistics-configuration.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.narrative.io/#organization\",\"name\":\"Narrative I/O Knowledge Base\",\"url\":\"https://docs.narrative.io\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/narrative-07c7a1f7/ia6SQX79O4nc7uYf/logo/banner.png?fit=max\u0026auto=format\u0026n=ia6SQX79O4nc7uYf\u0026q=85\u0026s=99860b25011c79366624a87d1f648861\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.narrative.io#website\",\"name\":\"Narrative I/O Knowledge Base\",\"url\":\"https://docs.narrative.io\",\"publisher\":{\"@id\":\"https://docs.narrative.io/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.narrative.io/api-reference/dataset-statistics/put-statistics-configuration#webpage\",\"url\":\"https://docs.narrative.io/api-reference/dataset-statistics/put-statistics-configuration\",\"name\":\"Put Statistics Configuration\",\"description\":\"Create or update the statistics configuration for a dataset. Replaces any existing configuration.\",\"dateModified\":\"2026-11-03T10:12:47.447Z\",\"isPartOf\":{\"@id\":\"https://docs.narrative.io#website\"},\"breadcrumb\":{\"@id\":\"https://docs.narrative.io/api-reference/dataset-statistics/put-statistics-configuration#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.narrative.io/api-reference/dataset-statistics/put-statistics-configuration#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Dataset Statistics\",\"item\":\"https://docs.narrative.io/api-reference/dataset-statistics/get-statistics-configuration\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Put Statistics Configuration\",\"item\":\"https://docs.narrative.io/api-reference/dataset-statistics/put-statistics-configuration\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://docs.narrative.io/api-reference/dataset-statistics/put-statistics-configuration#apireference\",\"headline\":\"Put Statistics Configuration\",\"name\":\"Put Statistics Configuration\",\"description\":\"Create or update the statistics configuration for a dataset. Replaces any existing configuration.\",\"url\":\"https://docs.narrative.io/api-reference/dataset-statistics/put-statistics-configuration\",\"mainEntityOfPage\":{\"@id\":\"https://docs.narrative.io/api-reference/dataset-statistics/put-statistics-configuration#webpage\"},\"dateModified\":\"2026-11-03T10:12:47.447Z\",\"publisher\":{\"@id\":\"https://docs.narrative.io/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.narrative.io#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Narrative I/O Knowledge Base\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"Narrative I/O Knowledge Base","nav":{"global":{"anchors":[{"anchor":"Release Notes","icon":"clock-rotate-left","href":"/release-notes"}]},"tabs":[{"tab":"Getting Started","pages":[{"title":"Getting Started","href":"/getting-started/create-account"}]},{"tab":"Concepts","pages":[{"title":"Concepts","href":"/concepts"}]},{"tab":"Guides","pages":[{"title":"Guides","href":"/guides"}]},{"tab":"Cookbooks","pages":[{"title":"Cookbooks","href":"/cookbooks"}]},{"tab":"Reference","pages":[{"title":"Reference","href":"/reference"}]},{"tab":"Connectors","pages":[{"title":"Connectors","href":"/reference/connectors"}]},{"tab":"NQL","pages":[{"title":"NQL","href":"/nql"}]},{"tab":"API Documentation","groups":[{"group":"Access Rules","pages":[{"title":"Get an Access Rule by id (V2)","deprecated":null,"version":null,"openapi":"https://docs-cdn.narrative.io/api-reference/main/openapi.json get /v2/access-rules/{access_rule_id}","href":"/api-reference/access-rules/get-an-access-rule-by-id-v2"},{"title":"Update an Access Rule by id (V2)","deprecated":null,"version":null,"openapi":"https://docs-cdn.narrative.io/api-reference/main/openapi.json put /v2/access-rules/{access_rule_id}","href":"/api-reference/access-rules/update-an-access-rule-by-id-v2"},{"title":"Delete an access rule","deprecated":null,"version":null,"openapi":"https://docs-cdn.narrative.io/api-reference/main/openapi.json delete /v2/access-rules/{access_rule_id}","href":"/api-reference/access-rules/delete-an-access-rule"},{"title":"Get the query policy of an Access Rule","deprecated":null,"version":null,"openapi":"https://docs-cdn.narrative.io/api-reference/main/openapi.json get /v2/access-rules/{access_rule_id}/query-policy","href":"/api-reference/access-rules/get-the-query-policy-of-an-access-rule"},{"title":"Set the query policy of an Access Rule","deprecated":null,"version":null,"openapi":"https://docs-cdn.narrative.io/api-reference/main/openapi.json put /v2/access-rules/{access_rule_id}/query-policy","href":"/api-reference/access-rules/set-the-query-policy-of-an-access-rule"},{"title":"Remove the query policy of an Access Rule","deprecated":null,"version":null,"openapi":"https://docs-cdn.narrative.io/api-reference/main/openapi.json delete /v2/access-rules/{access_rule_id}/query-policy","href":"/api-reference/access-rules/remove-the-query-policy-of-an-access-rule"},{"title":"Get an Access Rule by name (V2)","deprecated":null,"version":null,"openapi":"https://docs-cdn.narrative.io/api-reference/main/openapi.json get /v2/access-rules/{company_slug}/{access_rule_name}","href":"/api-reference/access-rules/get-an-access-rule-by-name-v2"},{"title":"Get all accessible Access Rules (V2)","deprecated":null,"version":null,"openapi":"https://docs-cdn.narrative.io/api-reference/main/openapi.json get /v2/access-rules","href":"/api-reference/access-rules/get-all-accessible-access-rules-v2"},{"title":"Create a new Access Rule","deprecated":null,"version":null,"openapi":"https://docs-cdn.narrative.io/api-reference/main/openapi.json post /v2/access-rules","href":"/api-reference/access-rules/create-a-new-access-rule"}]},{"group":"Access Tokens","pages":[{"title":"List System Access Tokens","deprecated":null,"version":null,"openapi":"https://docs-cdn.narrative.io/api-reference/main/openapi.json get /access-tokens/tokens","href":"/api-reference/access-tokens/list-system-access-tokens"},{"title":"Create a System Access Token","deprecated":null,"version":null,"openapi":"https://docs-cdn.narrative.io/api-reference/main/openapi.json post /access-tokens/tokens","href":"/api-reference/access-tokens/create-a-system-access-token"},{"title":"Get a System Access Token by id","deprecated":null,"version":null,"openapi":"https://docs-cdn.narrative.io/api-reference/main/openapi.json get /access-tokens/tokens/{access_token_id}","href":"/api-reference/access-tokens/get-a-system-access-token-by-id"},{"title":"Update a System Access Token","deprecated":null,"version":null,"openapi":"https://docs-cdn.narrative.io/api-reference/main/openapi.json put /access-tokens/tokens/{access_token_id}","href":"/api-reference/access-tokens/update-a-system-access-token"},{"title":"Delete a System Access Token","deprecated":null,"version":null,"openapi":"https://docs-cdn.narrative.io/api-reference/main/openapi.json delete /access-tokens/tokens/{access_token_id}","href":"/api-reference/access-tokens/delete-a-system-access-token"}]},{"group":"Agent Conversations","pages":[{"title":"List the calling user's agent conversations","deprecated":null,"version":null,"openapi":"https://docs-cdn.narrative.io/api-reference/main/openapi.json get /agents/conversations","href":"/api-reference/agent-conversations/list-the-calling-users-agent-conversations"},{"title":"Create an agent conversation","deprecated":null,"version":null,"openapi":"https://docs-cdn.narrative.io/api-reference/main/openapi.json post /agents/conversations","href":"/api-reference/agent-conversations/create-an-agent-conversation"},{"title":"Get an agent conversation","deprecated":null,"version":null,"openapi":"https://docs-cdn.narrative.io/api-reference/main/openapi.json get /agents/conversations/{id}","href":"/api-reference/agent-conversations/get-an-agent-conversation"},{"title":"List conversation messages (delta read by version cursor)","deprecated":null,"version":null,"openapi":"https://docs-cdn.narrative.io/api-reference/main/openapi.json get /agents/conversations/{id}/messages","href":"/api-reference/agent-conversations/list-conversation-messages-delta-read-by-version-cursor"},{"title":"Start a new run on the conversation","deprecated":null,"version":null,"openapi":"https://docs-cdn.narrative.io/api-reference/main/openapi.json post /agents/conversations/{id}/runs","href":"/api-reference/agent-conversations/start-a-new-run-on-the-conversation"},{"title":"Stop waiting on a handle","deprecated":null,"version":null,"openapi":"https://docs-cdn.narrative.io/api-reference/main/openapi.json post /agents/conversations/{id}/waitables/{handle}/cancel","href":"/api-reference/agent-conversations/stop-waiting-on-a-handle"},{"title":"Get a run's current state","deprecated":null,"version":null,"openapi":"https://docs-cdn.narrative.io/api-reference/main/openapi.json get /agents/runs/{id}","href":"/api-reference/agent-conversations/get-a-runs-current-state"}]},{"group":"App API","pages":[{"title":"Delivery Commands","deprecated":null,"version":null,"openapi":"https://docs-cdn.narrative.io/api-reference/main/openapi.json get /v1/app/commands/delivery","href":"/api-reference/app-api/delivery-commands"},{"title":"Delivery Files","deprecated":null,"version":null,"openapi":"https://docs-cdn.narrative.io/api-reference/main/openapi.json get /v1/app/commands/delivery/{delivery_id}/files","href":"/api-reference/app-api/delivery-files"},{"title":"Download file","deprecated":null,"version":null,"openapi":"https://docs-cdn.narrative.io/api-reference/main/openapi.json post /v1/app/commands/delivery/{delivery_id}/download/{filename}","href":"/api-reference/app-api/download-file"}]},{"group":"App Invites","pages":[{"title":"List App Invites","deprecated":null,"version":null,"openapi":"https://docs-cdn.narrative.io/api-reference/main/openapi.json get /app-invites","href":"/api-reference/app-invites/list-app-invites"},{"title":"Create App Invite","deprecated":null,"version":null,"openapi":"https://docs-cdn.narrative.io/api-reference/main/openapi.json post /app-invites","href":"/api-reference/app-invites/create-app-invite"},{"title":"Get App Invite","deprecated":null,"version":null,"openapi":"https://docs-cdn.narrative.io/api-reference/main/openapi.json get /app-invites/{id}","href":"/api-reference/app-invites/get-app-invite"},{"title":"Archive App Invite","deprecated":null,"version":null,"openapi":"https://docs-cdn.narrative.io/api-reference/main/openapi.json delete /app-invites/{id}","href":"/api-reference/app-invites/archive-app-invite"},{"title":"Activate App Invite","deprecated":null,"version":null,"openapi":"https://docs-cdn.narrative.io/api-reference/main/openapi.json post /app-invites/{id}/activate","href":"/api-reference/app-invites/activate-app-invite"},{"title":"Get App Invite By Code","deprecated":null,"version":null,"openapi":"https://docs-cdn.narrative.io/api-reference/main/openapi.json get /app-invites/codes/{code}","href":"/api-reference/app-invites/get-app-invite-by-code"}]},{"group":"Apps","pages":[{"title":"Lists apps","deprecated":null,"version":null,"openapi":"https://docs-cdn.narrative.io/api-reference/main/openapi.json get /apps","href":"/api-reference/apps/lists-apps"},{"title":"Publish app event","deprecated":null,"version":null,"openapi":"https://docs-cdn.narrative.io/api-reference/main/openapi.json post /apps/events","href":"/api-reference/apps/publish-app-event"},{"title":"List installed app interfaces","deprecated":null,"version":null,"openapi":"https://docs-cdn.narrative.io/api-reference/main/openapi.json get /apps/installed/interfaces","href":"/api-reference/apps/list-installed-app-interfaces"},{"title":"List app interfaces","deprecated":null,"version":null,"openapi":"https://docs-cdn.narrative.io/api-reference/main/openapi.json get /apps/{app_id}/interfaces","href":"/api-reference/apps/list-app-interfaces"},{"title":"Get an app interface","deprecated":null,"version":null,"openapi":"https://docs-cdn.narrative.io/api-reference/main/openapi.json get /apps/{app_id}/interfaces/{interface_id}","href":"/api-reference/apps/get-an-app-interface"},{"title":"Lists profiles","deprecated":null,"version":null,"openapi":"https://docs-cdn.narrative.io/api-reference/main/openapi.json get /apps/{app_slug}/profiles","href":"/api-reference/apps/lists-profiles"},{"title":"Get an app's v1 manifest","deprecated":null,"version":null,"openapi":"https://docs-cdn.narrative.io/api-reference/main/openapi.json get /apps/{app_slug}/manifest","href":"/api-reference/apps/get-an-apps-v1-manifest"},{"title":"List Apps","deprecated":null,"version":null,"openapi":"https://docs-cdn.narrative.io/api-reference/main/openapi.json get /v2/apps","href":"/api-reference/apps/list-apps"},{"title":"Create App","deprecated":null,"version":null,"openapi":"https://docs-cdn.narrative.io/api-reference/main/openapi.json post /v2/apps","href":"/api-reference/apps/create-app"},{"title":"Get App","deprecated":null,"version":null,"openapi":"https://docs-cdn.narrative.io/api-reference/main/openapi.json get /v2/apps/{slug}","href":"/api-reference/apps/get-app"},{"title":"Archive App","deprecated":null,"version":null,"openapi":"https://docs-cdn.narrative.io/api-reference/main/openapi.json delete /v2/apps/{slug}","href":"/api-reference/apps/archive-app"},{"title":"Replace App Manifest","deprecated":null,"version":null,"openapi":"https://docs-cdn.narrative.io/api-reference/main/openapi.json put /v2/apps/{slug}/manifest","href":"/api-reference/apps/replace-app-manifest"},{"title":"Patch App Manifest","deprecated":null,"version":null,"openapi":"https://docs-cdn.narrative.io/api-reference/main/openapi.json patch /v2/apps/{slug}/manifest","href":"/api-reference/apps/patch-app-manifest"},{"title":"Generate App Credentials","deprecated":null,"version":null,"openapi":"https://docs-cdn.narrative.io/api-reference/main/openapi.json post /v2/apps/{slug}/credentials/generate","href":"/api-reference/apps/generate-app-credentials"}]},{"group":"Attributes","pages":[{"title":"Get attributes","deprecated":null,"version":null,"openapi":"https://docs-cdn.narrative.io/api-reference/main/openapi.json get /attributes","href":"/api-reference/attributes/get-attributes"},{"title":"Create an attribute","deprecated":null,"version":null,"openapi":"https://docs-cdn.narrative.io/api-reference/main/openapi.json post /attributes","href":"/api-reference/attributes/create-an-attribute"},{"title":"Get an attribute","deprecated":null,"version":null,"openapi":"https://docs-cdn.narrative.io/api-reference/main/openapi.json get /attributes/{attribute_name_or_id}","href":"/api-reference/attributes/get-an-attribute"},{"title":"Update an attribute","deprecated":null,"version":null,"openapi":"https://docs-cdn.narrative.io/api-reference/main/openapi.json put /attributes/{attribute_name_or_id}","href":"/api-reference/attributes/update-an-attribute"},{"title":"Delete an attribute","deprecated":null,"version":null,"openapi":"https://docs-cdn.narrative.io/api-reference/main/openapi.json delete /attributes/{attribute_name_or_id}","href":"/api-reference/attributes/delete-an-attribute"},{"title":"Get attribute references.","deprecated":null,"version":null,"openapi":"https://docs-cdn.narrative.io/api-reference/main/openapi.json get /attributes/{attribute_name_or_id}/references","href":"/api-reference/attributes/get-attribute-references"},{"title":"Get the derivation graph around an attribute.","deprecated":null,"version":null,"openapi":"https://docs-cdn.narrative.io/api-reference/main/openapi.json get /attributes/{attribute_name_or_id}/derivation-graph","href":"/api-reference/attributes/get-the-derivation-graph-around-an-attribute"}]},{"group":"Auth","pages":[{"title":"Request or refresh an OAuth token","deprecated":null,"version":null,"openapi":"https://docs-cdn.narrative.io/api-reference/main/openapi.json post /oauth/token","href":"/api-reference/auth/request-or-refresh-an-oauth-token"}]},{"group":"Authentication","pages":[{"title":"Sign in with a Stytch B2B session token","deprecated":null,"version":null,"openapi":"https://docs-cdn.narrative.io/api-reference/main/openapi.json post /authentication/b2b/login","href":"/api-reference/authentication/sign-in-with-a-stytch-b2b-session-token"},{"title":"Register with a Stytch B2B session token","deprecated":null,"version":null,"openapi":"https://docs-cdn.narrative.io/api-reference/main/openapi.json post /authentication/b2b/register","href":"/api-reference/authentication/register-with-a-stytch-b2b-session-token"},{"title":"Check whether a Stytch B2B member is registered on Narrative","deprecated":null,"version":null,"openapi":"https://docs-cdn.narrative.io/api-reference/main/openapi.json post /authentication/b2b/registration-status","href":"/api-reference/authentication/check-whether-a-stytch-b2b-member-is-registered-on-narrative"},{"title":"Exchange a user token for one scoped to another company","deprecated":null,"version":null,"openapi":"https://docs-cdn.narrative.io/api-reference/main/openapi.json post /authentication/exchange-token","href":"/api-reference/authentication/exchange-a-user-token-for-one-scoped-to-another-company"},{"title":"Sign in with a Stytch session token","deprecated":null,"version":null,"openapi":"https://docs-cdn.narrative.io/api-reference/main/openapi.json post /authentication/login","href":"/api-reference/authentication/sign-in-with-a-stytch-session-token"},{"title":"Register with a Stytch session token","deprecated":null,"version":null,"openapi":"https://docs-cdn.narrative.io/api-reference/main/openapi.json post /authentication/register","href":"/api-reference/authentication/register-with-a-stytch-session-token"},{"title":"Check whether a Stytch Magic Links or OAuth user is registered on Narrative","deprecated":null,"version":null,"openapi":"https://docs-cdn.narrative.io/api-reference/main/openapi.json post /authentication/registration-status","href":"/api-reference/authentication/check-whether-a-stytch-magic-links-or-oauth-user-is-registered-on-narrative"}]},{"group":"Billings","pages":[{"title":"Get dataset storage billing","deprecated":null,"version":null,"openapi":"https://docs-cdn.narrative.io/api-reference/main/openapi.json get /admin/billings/dataset-storage-billing","href":"/api-reference/billings/get-dataset-storage-billing"},{"title":"Get dataset storage billing for company","deprecated":null,"version":null,"openapi":"https://docs-cdn.narrative.io/api-reference/main/openapi.json get /billings/dataset-storage-billing","href":"/api-reference/billings/get-dataset-storage-billing-for-company"}]},{"group":"Companies","pages":[{"title":"Lists Company Domains","deprecated":null,"version":null,"openapi":"https://docs-cdn.narrative.io/api-reference/main/openapi.json get /companies/{company_id}/domains","href":"/api-reference/companies/lists-company-domains"},{"title":"Get a presigned URL to upload company logo","deprecated":null,"version":null,"openapi":"https://docs-cdn.narrative.io/api-reference/main/openapi.json post /admin/companies/logo-upload-url","href":"/api-reference/companies/get-a-presigned-url-to-upload-company-logo"}]},{"group":"Company","pages":[{"title":"Get a company","deprecated":null,"version":null,"openapi":"https://docs-cdn.narrative.io/api-reference/main/openapi.json get /companies/{company_id}","href":"/api-reference/company/get-a-company"},{"title":"Get a company","deprecated":null,"version":null,"openapi":"https://docs-cdn.narrative.io/api-reference/main/openapi.json get /company/{company_id}","href":"/api-reference/company/get-a-company-1"},{"title":"Update a company","deprecated":null,"version":null,"openapi":"https://docs-cdn.narrative.io/api-reference/main/openapi.json put /company/{company_id}","href":"/api-reference/company/update-a-company"},{"title":"Delete (archive) a company","deprecated":null,"version":null,"openapi":"https://docs-cdn.narrative.io/api-reference/main/openapi.json delete /company/{company_id}","href":"/api-reference/company/delete-archive-a-company"},{"title":"Clear the company's default compute pool for a data plane","deprecated":null,"version":null,"openapi":"https://docs-cdn.narrative.io/api-reference/main/openapi.json delete /company/{company_id}/data-planes/{data_plane_id}/default-compute-pool","href":"/api-reference/company/clear-the-companys-default-compute-pool-for-a-data-plane"},{"title":"Set the company's default compute pool for a data plane","deprecated":null,"version":null,"openapi":"https://docs-cdn.narrative.io/api-reference/main/openapi.json put /company/{company_id}/data-planes/{data_plane_id}/default-compute-pool/{compute_pool_id}","href":"/api-reference/company/set-the-companys-default-compute-pool-for-a-data-plane"},{"title":"Update a user","deprecated":null,"version":null,"openapi":"https://docs-cdn.narrative.io/api-reference/main/openapi.json put /users/{user_id}","href":"/api-reference/company/update-a-user"}]},{"group":"Company Marketing Information","pages":[{"title":"Returns the company and user associated with the token","deprecated":null,"version":null,"openapi":"https://docs-cdn.narrative.io/api-reference/main/openapi.json get /company-info/whoami","href":"/api-reference/company-marketing-information/returns-the-company-and-user-associated-with-the-token"},{"title":"Get marketing details on a company","deprecated":null,"version":null,"openapi":"https://docs-cdn.narrative.io/api-reference/main/openapi.json get /company-info/{company_id}","href":"/api-reference/company-marketing-information/get-marketing-details-on-a-company"}]},{"group":"Compute Pools","pages":[{"title":"List compute pools","deprecated":null,"version":null,"openapi":"https://docs-cdn.narrative.io/api-reference/main/openapi.json get /data-planes/{data_plane_id}/compute-pools","href":"/api-reference/compute-pools/list-compute-pools"},{"title":"Create a compute pool","deprecated":null,"version":null,"openapi":"https://docs-cdn.narrative.io/api-reference/main/openapi.json post /data-planes/{data_plane_id}/compute-pools","href":"/api-reference/compute-pools/create-a-compute-pool"},{"title":"Get a compute pool by ID","deprecated":null,"version":null,"openapi":"https://docs-cdn.narrative.io/api-reference/main/openapi.json get /data-planes/{data_plane_id}/compute-pools/{compute_pool_id}","href":"/api-reference/compute-pools/get-a-compute-pool-by-id"},{"title":"Update a compute pool","deprecated":null,"version":null,"openapi":"https://docs-cdn.narrative.io/api-reference/main/openapi.json put /data-planes/{data_plane_id}/compute-pools/{compute_pool_id}","href":"/api-reference/compute-pools/update-a-compute-pool"},{"title":"Archive a compute pool","deprecated":null,"version":null,"openapi":"https://docs-cdn.narrative.io/api-reference/main/openapi.json delete /data-planes/{data_plane_id}/compute-pools/{compute_pool_id}","href":"/api-reference/compute-pools/archive-a-compute-pool"}]},{"group":"Connections","pages":[{"title":"List connections","deprecated":null,"version":null,"openapi":"https://docs-cdn.narrative.io/api-reference/main/openapi.json get /v2/connections","href":"/api-reference/connections/list-connections"},{"title":"Create a connection","deprecated":null,"version":null,"openapi":"https://docs-cdn.narrative.io/api-reference/main/openapi.json post /v2/connections","href":"/api-reference/connections/create-a-connection"},{"title":"Get a connection","deprecated":null,"version":null,"openapi":"https://docs-cdn.narrative.io/api-reference/main/openapi.json get /v2/connections/{connection_id}","href":"/api-reference/connections/get-a-connection"},{"title":"Archive a connection","deprecated":null,"version":null,"openapi":"https://docs-cdn.narrative.io/api-reference/main/openapi.json delete /v2/connections/{connection_id}","href":"/api-reference/connections/archive-a-connection"}]},{"group":"Data Planes","pages":[{"title":"List data planes","deprecated":null,"version":null,"openapi":"https://docs-cdn.narrative.io/api-reference/main/openapi.json get /data-planes","href":"/api-reference/data-planes/list-data-planes"},{"title":"Create a data plane","deprecated":null,"version":null,"openapi":"https://docs-cdn.narrative.io/api-reference/main/openapi.json post /data-planes","href":"/api-reference/data-planes/create-a-data-plane"},{"title":"Get a data plane by ID","deprecated":null,"version":null,"openapi":"https://docs-cdn.narrative.io/api-reference/main/openapi.json get /data-planes/{data_plane_id}","href":"/api-reference/data-planes/get-a-data-plane-by-id"},{"title":"Archive a data plane","deprecated":null,"version":null,"openapi":"https://docs-cdn.narrative.io/api-reference/main/openapi.json delete /data-planes/{data_plane_id}","href":"/api-reference/data-planes/archive-a-data-plane"},{"title":"Update a data plane","deprecated":null,"version":null,"openapi":"https://docs-cdn.narrative.io/api-reference/main/openapi.json patch /data-planes/{data_plane_id}","href":"/api-reference/data-planes/update-a-data-plane"},{"title":"Data plane heartbeat","deprecated":null,"version":null,"openapi":"https://docs-cdn.narrative.io/api-reference/main/openapi.json post /data-planes/{data_plane_id}/heartbeat","href":"/api-reference/data-planes/data-plane-heartbeat"},{"title":"Trigger a health check","deprecated":null,"version":null,"openapi":"https://docs-cdn.narrative.io/api-reference/main/openapi.json post /data-planes/{data_plane_id}/health-check","href":"/api-reference/data-planes/trigger-a-health-check"},{"title":"Replace the collaborators on a data plane","deprecated":null,"version":null,"openapi":"https://docs-cdn.narrative.io/api-reference/main/openapi.json put /data-planes/{data_plane_id}/collaborators","href":"/api-reference/data-planes/replace-the-collaborators-on-a-data-plane"},{"title":"Add a collaborator to a data plane","deprecated":null,"version":null,"openapi":"https://docs-cdn.narrative.io/api-reference/main/openapi.json put /data-planes/{data_plane_id}/collaborators/{collaborator_company_id}","href":"/api-reference/data-planes/add-a-collaborator-to-a-data-plane"},{"title":"Remove a collaborator from a data plane","deprecated":null,"version":null,"openapi":"https://docs-cdn.narrative.io/api-reference/main/openapi.json delete /data-planes/{data_plane_id}/collaborators/{collaborator_company_id}","href":"/api-reference/data-planes/remove-a-collaborator-from-a-data-plane"},{"title":"Set the default compute pool for a data plane","deprecated":null,"version":null,"openapi":"https://docs-cdn.narrative.io/api-reference/main/openapi.json put /data-planes/{data_plane_id}/default-compute-pool/{compute_pool_id}","href":"/api-reference/data-planes/set-the-default-compute-pool-for-a-data-plane"},{"title":"Clear the default compute pool for a data plane","deprecated":null,"version":null,"openapi":"https://docs-cdn.narrative.io/api-reference/main/openapi.json delete /data-planes/{data_plane_id}/default-compute-pool","href":"/api-reference/data-planes/clear-the-default-compute-pool-for-a-data-plane"}]},{"group":"Dataset Configuration","pages":[{"title":"Preview snapshot expirations","deprecated":null,"version":null,"openapi":"https://docs-cdn.narrative.io/api-reference/main/openapi.json post /datasets/{dataset_id}/retention-policy/preview","href":"/api-reference/dataset-configuration/preview-snapshot-expirations"},{"title":"Upsert retention policies for a dataset","deprecated":null,"version":null,"openapi":"https://docs-cdn.narrative.io/api-reference/main/openapi.json put /datasets/{dataset_id}/retention-policy","href":"/api-reference/dataset-configuration/upsert-retention-policies-for-a-dataset"}]},{"group":"Dataset Files","pages":[{"title":"Files added","deprecated":null,"version":null,"openapi":"https://docs-cdn.narrative.io/api-reference/main/openapi.json get /datasets/{dataset_id}/snapshots/{snapshot_id}/files-added","href":"/api-reference/dataset-files/files-added"},{"title":"Find snapshots","deprecated":null,"version":null,"openapi":"https://docs-cdn.narrative.io/api-reference/main/openapi.json get /datasets/{dataset_id}/find-snapshots","href":"/api-reference/dataset-files/find-snapshots"},{"title":"Find files","deprecated":null,"version":null,"openapi":"https://docs-cdn.narrative.io/api-reference/main/openapi.json get /datasets/{dataset_id}/find-files","href":"/api-reference/dataset-files/find-files"},{"title":"Issue file download url","deprecated":null,"version":null,"openapi":"https://docs-cdn.narrative.io/api-reference/main/openapi.json post /datasets/{dataset_id}/snapshots/{snapshot_id}/files-added/{file_id}/download","href":"/api-reference/dataset-files/issue-file-download-url"}]},{"group":"Dataset Refresh","pages":[{"title":"Update the materialized view refresh configuration","deprecated":null,"version":null,"openapi":"https://docs-cdn.narrative.io/api-reference/main/openapi.json put /datasets/{dataset_id}/refresh-schedule","href":"/api-reference/dataset-refresh/update-the-materialized-view-refresh-configuration"},{"title":"Create a refresh schedule for an existing materialized view","deprecated":null,"version":null,"openapi":"https://docs-cdn.narrative.io/api-reference/main/openapi.json post /datasets/{dataset_id}/refresh-schedule","href":"/api-reference/dataset-refresh/create-a-refresh-schedule-for-an-existing-materialized-view"},{"title":"Archive the materialized view refresh configuration","deprecated":null,"version":null,"openapi":"https://docs-cdn.narrative.io/api-reference/main/openapi.json delete /datasets/{dataset_id}/refresh-schedule","href":"/api-reference/dataset-refresh/archive-the-materialized-view-refresh-configuration"},{"title":"Run a materialized view refresh now","deprecated":null,"version":null,"openapi":"https://docs-cdn.narrative.io/api-reference/main/openapi.json post /datasets/{dataset_id}/refresh-materialized-view","href":"/api-reference/dataset-refresh/run-a-materialized-view-refresh-now"}]},{"group":"Dataset Samples","pages":[{"title":"Sample a dataset","deprecated":null,"version":null,"openapi":"https://docs-cdn.narrative.io/api-reference/main/openapi.json get /datasets/{dataset_id}/sample","href":"/api-reference/dataset-samples/sample-a-dataset"},{"title":"Upload a sample","deprecated":null,"version":null,"openapi":"https://docs-cdn.narrative.io/api-reference/main/openapi.json put /datasets/{dataset_id}/sample","href":"/api-reference/dataset-samples/upload-a-sample"},{"title":"Delete a sample","deprecated":null,"version":null,"openapi":"https://docs-cdn.narrative.io/api-reference/main/openapi.json delete /datasets/{dataset_id}/sample","href":"/api-reference/dataset-samples/delete-a-sample"},{"title":"Sample a dataset (Admin)","deprecated":null,"version":null,"openapi":"https://docs-cdn.narrative.io/api-reference/main/openapi.json get /datasets/{dataset_id}/admin/sample","href":"/api-reference/dataset-samples/sample-a-dataset-admin"},{"title":"Request Dataset Sample","deprecated":null,"version":null,"openapi":"https://docs-cdn.narrative.io/api-reference/main/openapi.json post /datasets/{dataset_id}/request-sample","href":"/api-reference/dataset-samples/request-dataset-sample"},{"title":"Sample a dataset and redact the sample","deprecated":null,"version":null,"openapi":"https://docs-cdn.narrative.io/api-reference/main/openapi.json post /v2/datasets/{dataset_id}/request-sample","href":"/api-reference/dataset-samples/sample-a-dataset-and-redact-the-sample"},{"title":"Get a dataset's sample redaction","deprecated":null,"version":null,"openapi":"https://docs-cdn.narrative.io/api-reference/main/openapi.json get /datasets/{dataset_id}/redaction","href":"/api-reference/dataset-samples/get-a-datasets-sample-redaction"},{"title":"Upload a dataset's sample redaction","deprecated":null,"version":null,"openapi":"https://docs-cdn.narrative.io/api-reference/main/openapi.json put /datasets/{dataset_id}/redaction","href":"/api-reference/dataset-samples/upload-a-datasets-sample-redaction"},{"title":"Delete a dataset's sample redaction","deprecated":null,"version":null,"openapi":"https://docs-cdn.narrative.io/api-reference/main/openapi.json delete /datasets/{dataset_id}/redaction","href":"/api-reference/dataset-samples/delete-a-datasets-sample-redaction"},{"title":"Sample a dataset with its redaction applied","deprecated":null,"version":null,"openapi":"https://docs-cdn.narrative.io/api-reference/main/openapi.json get /datasets/{dataset_id}/sample/redacted","href":"/api-reference/dataset-samples/sample-a-dataset-with-its-redaction-applied"},{"title":"Sampled Mappings","deprecated":null,"version":null,"openapi":"https://docs-cdn.narrative.io/api-reference/main/openapi.json get /datasets/{dataset_id}/sample/mappings","href":"/api-reference/dataset-samples/sampled-mappings"}]},{"group":"Dataset Statistics","pages":[{"title":"Get Statistics Configuration","description":"Retrieve the current statistics configuration for a dataset.","deprecated":null,"version":null,"openapi":"https://docs-cdn.narrative.io/api-reference/main/openapi.json get /datasets/{dataset_id}/statistics-configuration","href":"/api-reference/dataset-statistics/get-statistics-configuration"},{"title":"Put Statistics Configuration","deprecated":null,"version":null,"openapi":"https://docs-cdn.narrative.io/api-reference/main/openapi.json put /datasets/{dataset_id}/statistics-configuration","href":"/api-reference/dataset-statistics/put-statistics-configuration"},{"title":"Disable Statistics Configuration","description":"Disable the statistics configuration. Statistics will no longer be computed.","deprecated":null,"version":null,"openapi":"https://docs-cdn.narrative.io/api-reference/main/openapi.json delete /datasets/{dataset_id}/statistics-configuration","href":"/api-reference/dataset-statistics/disable-statistics-configuration"}]},{"group":"Datasets","pages":[{"title":"Get datasets","deprecated":null,"version":null,"openapi":"https://docs-cdn.narrative.io/api-reference/main/openapi.json get /datasets","href":"/api-reference/datasets/get-datasets"},{"title":"Create a dataset","deprecated":null,"version":null,"openapi":"https://docs-cdn.narrative.io/api-reference/main/openapi.json post /datasets","href":"/api-reference/datasets/create-a-dataset"},{"title":"Get a dataset","deprecated":null,"version":null,"openapi":"https://docs-cdn.narrative.io/api-reference/main/openapi.json get /datasets/{dataset_id}","href":"/api-reference/datasets/get-a-dataset"},{"title":"Update a dataset","deprecated":null,"version":null,"openapi":"https://docs-cdn.narrative.io/api-reference/main/openapi.json put /datasets/{dataset_id}","href":"/api-reference/datasets/update-a-dataset"},{"title":"Delete a dataset","deprecated":null,"version":null,"openapi":"https://docs-cdn.narrative.io/api-reference/main/openapi.json delete /datasets/{dataset_id}","href":"/api-reference/datasets/delete-a-dataset"},{"title":"Activate a dataset","deprecated":null,"version":null,"openapi":"https://docs-cdn.narrative.io/api-reference/main/openapi.json put /datasets/{dataset_id}/activate","href":"/api-reference/datasets/activate-a-dataset"},{"title":"Activate a dataset","deprecated":true,"version":null,"openapi":"https://docs-cdn.narrative.io/api-reference/main/openapi.json post /datasets/{dataset_id}/activate","href":"/api-reference/datasets/activate-a-dataset-1"},{"title":"Truncate a dataset","deprecated":null,"version":null,"openapi":"https://docs-cdn.narrative.io/api-reference/main/openapi.json post /datasets/{dataset_id}/truncate","href":"/api-reference/datasets/truncate-a-dataset"},{"title":"Get admin info for a dataset","deprecated":null,"version":null,"openapi":"https://docs-cdn.narrative.io/api-reference/main/openapi.json get /datasets/{dataset_id}/admin","href":"/api-reference/datasets/get-admin-info-for-a-dataset"},{"title":"Update a dataset's partition spec","deprecated":null,"version":null,"openapi":"https://docs-cdn.narrative.io/api-reference/main/openapi.json post /datasets/{dataset_id}/admin/partition-spec","href":"/api-reference/datasets/update-a-datasets-partition-spec"},{"title":"Get dataset statistics","deprecated":null,"version":null,"openapi":"https://docs-cdn.narrative.io/api-reference/main/openapi.json get /datasets/{dataset_id}/stats","href":"/api-reference/datasets/get-dataset-statistics"},{"title":"Get detailed statistics","deprecated":null,"version":null,"openapi":"https://docs-cdn.narrative.io/api-reference/main/openapi.json get /datasets/{dataset_id}/column-stats","href":"/api-reference/datasets/get-detailed-statistics"},{"title":"Create or Update detailed statistics","deprecated":null,"version":null,"openapi":"https://docs-cdn.narrative.io/api-reference/main/openapi.json put /datasets/{dataset_id}/column-stats","href":"/api-reference/datasets/create-or-update-detailed-statistics"},{"title":"Submit recalculation","deprecated":null,"version":null,"openapi":"https://docs-cdn.narrative.io/api-reference/main/openapi.json post /datasets/{dataset_id}/column-stats/recalculate","href":"/api-reference/datasets/submit-recalculation"},{"title":"Ingest a file","deprecated":null,"version":null,"openapi":"https://docs-cdn.narrative.io/api-reference/main/openapi.json post /datasets/{dataset_id}/upload","href":"/api-reference/datasets/ingest-a-file"},{"title":"Issue an ingestion token","deprecated":null,"version":null,"openapi":"https://docs-cdn.narrative.io/api-reference/main/openapi.json post /datasets/{dataset_id}/upload/token","href":"/api-reference/datasets/issue-an-ingestion-token"},{"title":"List connector interfaces compatible with a dataset","deprecated":null,"version":null,"openapi":"https://docs-cdn.narrative.io/api-reference/main/openapi.json get /datasets/{dataset_id}/interfaces","href":"/api-reference/datasets/list-connector-interfaces-compatible-with-a-dataset"}]},{"group":"Derivations","pages":[{"title":"Get derivation rules","deprecated":null,"version":null,"openapi":"https://docs-cdn.narrative.io/api-reference/main/openapi.json get /derivations","href":"/api-reference/derivations/get-derivation-rules"},{"title":"Create a derivation rule","deprecated":null,"version":null,"openapi":"https://docs-cdn.narrative.io/api-reference/main/openapi.json post /derivations","href":"/api-reference/derivations/create-a-derivation-rule"},{"title":"Get a derivation rule","deprecated":null,"version":null,"openapi":"https://docs-cdn.narrative.io/api-reference/main/openapi.json get /derivations/{derivation_id}","href":"/api-reference/derivations/get-a-derivation-rule"},{"title":"Delete a derivation rule","deprecated":null,"version":null,"openapi":"https://docs-cdn.narrative.io/api-reference/main/openapi.json delete /derivations/{derivation_id}","href":"/api-reference/derivations/delete-a-derivation-rule"},{"title":"Update a derivation rule","deprecated":null,"version":null,"openapi":"https://docs-cdn.narrative.io/api-reference/main/openapi.json patch /derivations/{derivation_id}","href":"/api-reference/derivations/update-a-derivation-rule"}]},{"group":"Encryption Materials","pages":[{"title":"List encryption materials","deprecated":null,"version":null,"openapi":"https://docs-cdn.narrative.io/api-reference/main/openapi.json get /encryption-materials","href":"/api-reference/encryption-materials/list-encryption-materials"},{"title":"Create an encryption material","deprecated":null,"version":null,"openapi":"https://docs-cdn.narrative.io/api-reference/main/openapi.json post /encryption-materials","href":"/api-reference/encryption-materials/create-an-encryption-material"},{"title":"List decrypted encryption materials","deprecated":null,"version":null,"openapi":"https://docs-cdn.narrative.io/api-reference/main/openapi.json get /encryption-materials/decrypted","href":"/api-reference/encryption-materials/list-decrypted-encryption-materials"},{"title":"Get an encryption material","deprecated":null,"version":null,"openapi":"https://docs-cdn.narrative.io/api-reference/main/openapi.json get /encryption-materials/{encryption_material_id}","href":"/api-reference/encryption-materials/get-an-encryption-material"},{"title":"Update an encryption material","deprecated":null,"version":null,"openapi":"https://docs-cdn.narrative.io/api-reference/main/openapi.json put /encryption-materials/{encryption_material_id}","href":"/api-reference/encryption-materials/update-an-encryption-material"},{"title":"Archive an encryption material","deprecated":null,"version":null,"openapi":"https://docs-cdn.narrative.io/api-reference/main/openapi.json delete /encryption-materials/{encryption_material_id}","href":"/api-reference/encryption-materials/archive-an-encryption-material"}]},{"group":"Installations","pages":[{"title":"List Installations","deprecated":null,"version":null,"openapi":"https://docs-cdn.narrative.io/api-reference/main/openapi.json get /installations","href":"/api-reference/installations/list-installations"},{"title":"Create Installation","deprecated":null,"version":null,"openapi":"https://docs-cdn.narrative.io/api-reference/main/openapi.json post /installations","href":"/api-reference/installations/create-installation"},{"title":"Whoami Installation","deprecated":null,"version":null,"openapi":"https://docs-cdn.narrative.io/api-reference/main/openapi.json get /installations/whoami","href":"/api-reference/installations/whoami-installation"},{"title":"Get Installation","deprecated":null,"version":null,"openapi":"https://docs-cdn.narrative.io/api-reference/main/openapi.json get /installations/{id}","href":"/api-reference/installations/get-installation"},{"title":"Delete Installation","deprecated":null,"version":null,"openapi":"https://docs-cdn.narrative.io/api-reference/main/openapi.json delete /installations/{id}","href":"/api-reference/installations/delete-installation"},{"title":"Create Installation Token","deprecated":null,"version":null,"openapi":"https://docs-cdn.narrative.io/api-reference/main/openapi.json post /installations/{id}/token","href":"/api-reference/installations/create-installation-token"}]},{"group":"Jobs","pages":[{"title":"Get jobs","deprecated":null,"version":null,"openapi":"https://docs-cdn.narrative.io/api-reference/main/openapi.json get /jobs","href":"/api-reference/jobs/get-jobs"},{"title":"Get a job","deprecated":null,"version":null,"openapi":"https://docs-cdn.narrative.io/api-reference/main/openapi.json get /jobs/{job_id}","href":"/api-reference/jobs/get-a-job"},{"title":"Run a job","deprecated":null,"version":null,"openapi":"https://docs-cdn.narrative.io/api-reference/main/openapi.json post /jobs/{job_id}/run","href":"/api-reference/jobs/run-a-job"},{"title":"Schedule a job","deprecated":null,"version":null,"openapi":"https://docs-cdn.narrative.io/api-reference/main/openapi.json post /jobs/{job_id}/schedule","href":"/api-reference/jobs/schedule-a-job"},{"title":"Complete a job","deprecated":null,"version":null,"openapi":"https://docs-cdn.narrative.io/api-reference/main/openapi.json post /jobs/{job_id}/complete","href":"/api-reference/jobs/complete-a-job"},{"title":"Fail a job","deprecated":null,"version":null,"openapi":"https://docs-cdn.narrative.io/api-reference/main/openapi.json post /jobs/{job_id}/fail","href":"/api-reference/jobs/fail-a-job"},{"title":"Request cancellation of a job","deprecated":null,"version":null,"openapi":"https://docs-cdn.narrative.io/api-reference/main/openapi.json post /jobs/{job_id}/request-cancellation","href":"/api-reference/jobs/request-cancellation-of-a-job"},{"title":"Cancel a job","deprecated":null,"version":null,"openapi":"https://docs-cdn.narrative.io/api-reference/main/openapi.json post /jobs/{job_id}/cancel","href":"/api-reference/jobs/cancel-a-job"},{"title":"Reschedule a job","deprecated":null,"version":null,"openapi":"https://docs-cdn.narrative.io/api-reference/main/openapi.json post /jobs/{job_id}/reschedule","href":"/api-reference/jobs/reschedule-a-job"}]},{"group":"Mappings","pages":[{"title":"Get mappings","deprecated":null,"version":null,"openapi":"https://docs-cdn.narrative.io/api-reference/main/openapi.json get /mappings","href":"/api-reference/mappings/get-mappings"},{"title":"Get mapping","deprecated":null,"version":null,"openapi":"https://docs-cdn.narrative.io/api-reference/main/openapi.json get /mappings/{mapping_id}","href":"/api-reference/mappings/get-mapping"},{"title":"Update a mapping","deprecated":null,"version":null,"openapi":"https://docs-cdn.narrative.io/api-reference/main/openapi.json put /mappings/{mapping_id}","href":"/api-reference/mappings/update-a-mapping"},{"title":"Delete a mapping","deprecated":null,"version":null,"openapi":"https://docs-cdn.narrative.io/api-reference/main/openapi.json delete /mappings/{mapping_id}","href":"/api-reference/mappings/delete-a-mapping"},{"title":"Accept a mapping","deprecated":null,"version":null,"openapi":"https://docs-cdn.narrative.io/api-reference/main/openapi.json post /mappings/{mapping_id}/accept","href":"/api-reference/mappings/accept-a-mapping"},{"title":"Get mappings for a company","deprecated":null,"version":null,"openapi":"https://docs-cdn.narrative.io/api-reference/main/openapi.json get /mappings/companies/{company_id}","href":"/api-reference/mappings/get-mappings-for-a-company"},{"title":"Create a mapping","deprecated":null,"version":null,"openapi":"https://docs-cdn.narrative.io/api-reference/main/openapi.json post /mappings/companies/{company_id}","href":"/api-reference/mappings/create-a-mapping"},{"title":"Get mapping preview","deprecated":null,"version":null,"openapi":"https://docs-cdn.narrative.io/api-reference/main/openapi.json get /mappings/{mapping_id}/sample","href":"/api-reference/mappings/get-mapping-preview"},{"title":"Test Mapping","deprecated":null,"version":null,"openapi":"https://docs-cdn.narrative.io/api-reference/main/openapi.json post /mappings/test","href":"/api-reference/mappings/test-mapping"}]},{"group":"MCP Connections","pages":[{"title":"List the calling user's external MCP connections","deprecated":null,"version":null,"openapi":"https://docs-cdn.narrative.io/api-reference/main/openapi.json get /mcp-connections","href":"/api-reference/mcp-connections/list-the-calling-users-external-mcp-connections"},{"title":"Begin connecting an external MCP server","deprecated":null,"version":null,"openapi":"https://docs-cdn.narrative.io/api-reference/main/openapi.json post /mcp-connections","href":"/api-reference/mcp-connections/begin-connecting-an-external-mcp-server"},{"title":"OAuth redirect target that receives the authorization code","deprecated":null,"version":null,"openapi":"https://docs-cdn.narrative.io/api-reference/main/openapi.json get /mcp-connections/callback","href":"/api-reference/mcp-connections/oauth-redirect-target-that-receives-the-authorization-code"},{"title":"Finish connecting an external MCP server","deprecated":null,"version":null,"openapi":"https://docs-cdn.narrative.io/api-reference/main/openapi.json post /mcp-connections/complete","href":"/api-reference/mcp-connections/finish-connecting-an-external-mcp-server"},{"title":"Get one of the calling user's MCP connections","deprecated":null,"version":null,"openapi":"https://docs-cdn.narrative.io/api-reference/main/openapi.json get /mcp-connections/{id}","href":"/api-reference/mcp-connections/get-one-of-the-calling-users-mcp-connections"},{"title":"Delete one of the calling user's MCP connections","deprecated":null,"version":null,"openapi":"https://docs-cdn.narrative.io/api-reference/main/openapi.json delete /mcp-connections/{id}","href":"/api-reference/mcp-connections/delete-one-of-the-calling-users-mcp-connections"}]},{"group":"Model Inference","pages":[{"title":"Run model inference","deprecated":null,"version":null,"openapi":"https://docs-cdn.narrative.io/api-reference/main/openapi.json post /model-inference/run","href":"/api-reference/model-inference/run-model-inference"}]},{"group":"Model Training","pages":[{"title":"Fine-tune a model","deprecated":null,"version":null,"openapi":"https://docs-cdn.narrative.io/api-reference/main/openapi.json post /model-training/run","href":"/api-reference/model-training/fine-tune-a-model"},{"title":"Train a classifier","deprecated":null,"version":null,"openapi":"https://docs-cdn.narrative.io/api-reference/main/openapi.json post /v1/model-training/train-classifier","href":"/api-reference/model-training/train-a-classifier"}]},{"group":"Models","pages":[{"title":"Get models","deprecated":null,"version":null,"openapi":"https://docs-cdn.narrative.io/api-reference/main/openapi.json get /models","href":"/api-reference/models/get-models"},{"title":"Get a model","deprecated":null,"version":null,"openapi":"https://docs-cdn.narrative.io/api-reference/main/openapi.json get /models/{model_id}","href":"/api-reference/models/get-a-model"},{"title":"Update a model","deprecated":null,"version":null,"openapi":"https://docs-cdn.narrative.io/api-reference/main/openapi.json put /models/{model_id}","href":"/api-reference/models/update-a-model"},{"title":"Archive a model","deprecated":null,"version":null,"openapi":"https://docs-cdn.narrative.io/api-reference/main/openapi.json delete /models/{model_id}","href":"/api-reference/models/archive-a-model"}]},{"group":"NQL","pages":[{"title":"Validate an NQL statement","deprecated":null,"version":null,"openapi":"https://docs-cdn.narrative.io/api-reference/main/openapi.json post /nql/validate","href":"/api-reference/nql/validate-an-nql-statement"},{"title":"Parse an NQL statement","deprecated":null,"version":null,"openapi":"https://docs-cdn.narrative.io/api-reference/main/openapi.json post /nql/parse","href":"/api-reference/nql/parse-an-nql-statement"},{"title":"Execute an NQL statement","deprecated":null,"version":null,"openapi":"https://docs-cdn.narrative.io/api-reference/main/openapi.json post /v1/nql/execute","href":"/api-reference/nql/execute-an-nql-statement"},{"title":"Get a forecast job","deprecated":null,"version":null,"openapi":"https://docs-cdn.narrative.io/api-reference/main/openapi.json get /nql/{job_id}","href":"/api-reference/nql/get-a-forecast-job"}]},{"group":"Permissions","pages":[{"title":"Create a permission","deprecated":null,"version":null,"openapi":"https://docs-cdn.narrative.io/api-reference/main/openapi.json post /admin/permissions","href":"/api-reference/permissions/create-a-permission"}]},{"group":"Profiles","pages":[{"title":"Returns app profiles","deprecated":null,"version":null,"openapi":"https://docs-cdn.narrative.io/api-reference/main/openapi.json get /installations/{installation_id}/profiles","href":"/api-reference/profiles/returns-app-profiles"},{"title":"Creates an app profile","deprecated":null,"version":null,"openapi":"https://docs-cdn.narrative.io/api-reference/main/openapi.json post /installations/{installation_id}/profiles","href":"/api-reference/profiles/creates-an-app-profile"},{"title":"Returns profile with {profile_id}","deprecated":null,"version":null,"openapi":"https://docs-cdn.narrative.io/api-reference/main/openapi.json get /installations/{installation_id}/profiles/{app_profile_id}","href":"/api-reference/profiles/returns-profile-with-"},{"title":"Updates an existing app profile","deprecated":null,"version":null,"openapi":"https://docs-cdn.narrative.io/api-reference/main/openapi.json put /installations/{installation_id}/profiles/{app_profile_id}","href":"/api-reference/profiles/updates-an-existing-app-profile"},{"title":"Enables a profile","deprecated":null,"version":null,"openapi":"https://docs-cdn.narrative.io/api-reference/main/openapi.json post /installations/{installation_id}/profiles/{app_profile_id}/enable","href":"/api-reference/profiles/enables-a-profile"},{"title":"Disables a profile","deprecated":null,"version":null,"openapi":"https://docs-cdn.narrative.io/api-reference/main/openapi.json post /installations/{installation_id}/profiles/{app_profile_id}/disable","href":"/api-reference/profiles/disables-a-profile"},{"title":"Archives a profile","deprecated":null,"version":null,"openapi":"https://docs-cdn.narrative.io/api-reference/main/openapi.json post /installations/{installation_id}/profiles/{app_profile_id}/archive","href":"/api-reference/profiles/archives-a-profile"}]},{"group":"Queries","pages":[{"title":"Get a query by id","deprecated":null,"version":null,"openapi":"https://docs-cdn.narrative.io/api-reference/main/openapi.json get /v2/queries/{query_id}","href":"/api-reference/queries/get-a-query-by-id"},{"title":"Deletes a query","deprecated":null,"version":null,"openapi":"https://docs-cdn.narrative.io/api-reference/main/openapi.json delete /v2/queries/{query_id}","href":"/api-reference/queries/deletes-a-query"},{"title":"Get accessible queries","deprecated":null,"version":null,"openapi":"https://docs-cdn.narrative.io/api-reference/main/openapi.json get /v2/queries","href":"/api-reference/queries/get-accessible-queries"},{"title":"Create a query","deprecated":null,"version":null,"openapi":"https://docs-cdn.narrative.io/api-reference/main/openapi.json post /v2/queries","href":"/api-reference/queries/create-a-query"}]},{"group":"Resources","pages":[{"title":"Get buckets","deprecated":null,"version":null,"openapi":"https://docs-cdn.narrative.io/api-reference/main/openapi.json get /resources/buckets","href":"/api-reference/resources/get-buckets"},{"title":"Create bucket","deprecated":null,"version":null,"openapi":"https://docs-cdn.narrative.io/api-reference/main/openapi.json post /resources/buckets","href":"/api-reference/resources/create-bucket"},{"title":"Update access type","deprecated":null,"version":null,"openapi":"https://docs-cdn.narrative.io/api-reference/main/openapi.json post /resources/update-access","href":"/api-reference/resources/update-access-type"}]},{"group":"Schema Inference","pages":[{"title":"Infer the dataset schema of a file passed by multipart file.","deprecated":null,"version":null,"openapi":"https://docs-cdn.narrative.io/api-reference/main/openapi.json post /v2/inference","href":"/api-reference/schema-inference/infer-the-dataset-schema-of-a-file-passed-by-multipart-file"}]},{"group":"Uploads","pages":[{"title":"Upload a file","deprecated":null,"version":null,"openapi":"https://docs-cdn.narrative.io/api-reference/main/openapi.json post /uploads/{upload_path}","href":"/api-reference/uploads/upload-a-file"}]},{"group":"Usage","pages":[{"title":"Create a usage event","deprecated":null,"version":null,"openapi":"https://docs-cdn.narrative.io/api-reference/main/openapi.json post /usage","href":"/api-reference/usage/create-a-usage-event"}]},{"group":"Views","pages":[{"title":"Get a view by id","deprecated":null,"version":null,"openapi":"https://docs-cdn.narrative.io/api-reference/main/openapi.json get /v2/views/{view_id}","href":"/api-reference/views/get-a-view-by-id"},{"title":"Updates a view","deprecated":null,"version":null,"openapi":"https://docs-cdn.narrative.io/api-reference/main/openapi.json put /v2/views/{view_id}","href":"/api-reference/views/updates-a-view"},{"title":"Archives a view","deprecated":null,"version":null,"openapi":"https://docs-cdn.narrative.io/api-reference/main/openapi.json delete /v2/views/{view_id}","href":"/api-reference/views/archives-a-view"},{"title":"Get accessible views","deprecated":null,"version":null,"openapi":"https://docs-cdn.narrative.io/api-reference/main/openapi.json get /v2/views","href":"/api-reference/views/get-accessible-views"},{"title":"Create a view","deprecated":null,"version":null,"openapi":"https://docs-cdn.narrative.io/api-reference/main/openapi.json post /v2/views","href":"/api-reference/views/create-a-view"}]},{"group":"Webhooks","pages":[{"title":"List webhook subscriptions","deprecated":null,"version":null,"openapi":"https://docs-cdn.narrative.io/api-reference/main/openapi.json get /webhooks","href":"/api-reference/webhooks/list-webhook-subscriptions"},{"title":"Create a webhook subscription","deprecated":null,"version":null,"openapi":"https://docs-cdn.narrative.io/api-reference/main/openapi.json post /webhooks","href":"/api-reference/webhooks/create-a-webhook-subscription"},{"title":"Get a webhook subscription by ID","deprecated":null,"version":null,"openapi":"https://docs-cdn.narrative.io/api-reference/main/openapi.json get /webhooks/{webhook_subscription_id}","href":"/api-reference/webhooks/get-a-webhook-subscription-by-id"},{"title":"Archive a webhook subscription","deprecated":null,"version":null,"openapi":"https://docs-cdn.narrative.io/api-reference/main/openapi.json delete /webhooks/{webhook_subscription_id}","href":"/api-reference/webhooks/archive-a-webhook-subscription"},{"title":"Event delivery","version":null,"deprecated":null,"openapi":"https://docs-cdn.narrative.io/api-reference/main/openapi.json webhook webhookDelivery","href":"/api-reference/webhooks/event-delivery"}]},{"group":"Whoami","pages":[{"title":"Get a current user","deprecated":null,"version":null,"openapi":"https://docs-cdn.narrative.io/api-reference/main/openapi.json get /whoami","href":"/api-reference/whoami/get-a-current-user"}]},{"group":"Workflows","pages":[{"title":"List workflows","deprecated":null,"version":null,"openapi":"https://docs-cdn.narrative.io/api-reference/main/openapi.json get /workflows","href":"/api-reference/workflows/list-workflows"},{"title":"Create a workflow","deprecated":null,"version":null,"openapi":"https://docs-cdn.narrative.io/api-reference/main/openapi.json post /workflows","href":"/api-reference/workflows/create-a-workflow"},{"title":"Get a workflow","deprecated":null,"version":null,"openapi":"https://docs-cdn.narrative.io/api-reference/main/openapi.json get /workflows/{workflow_id}","href":"/api-reference/workflows/get-a-workflow"},{"title":"Archive a workflow","deprecated":null,"version":null,"openapi":"https://docs-cdn.narrative.io/api-reference/main/openapi.json delete /workflows/{workflow_id}","href":"/api-reference/workflows/archive-a-workflow"},{"title":"Trigger a workflow","deprecated":null,"version":null,"openapi":"https://docs-cdn.narrative.io/api-reference/main/openapi.json post /workflows/{workflow_id}/trigger","href":"/api-reference/workflows/trigger-a-workflow"},{"title":"Schedule a workflow","deprecated":null,"version":null,"openapi":"https://docs-cdn.narrative.io/api-reference/main/openapi.json post /workflows/{workflow_id}/schedule","href":"/api-reference/workflows/schedule-a-workflow"},{"title":"Remove a workflow schedule","deprecated":null,"version":null,"openapi":"https://docs-cdn.narrative.io/api-reference/main/openapi.json delete /workflows/{workflow_id}/schedule","href":"/api-reference/workflows/remove-a-workflow-schedule"},{"title":"Cancel a workflow execution","deprecated":null,"version":null,"openapi":"https://docs-cdn.narrative.io/api-reference/main/openapi.json post /workflows/{workflow_id}/cancel","href":"/api-reference/workflows/cancel-a-workflow-execution"},{"title":"List workflow runs","deprecated":null,"version":null,"openapi":"https://docs-cdn.narrative.io/api-reference/main/openapi.json get /workflows/{workflow_id}/runs","href":"/api-reference/workflows/list-workflow-runs"},{"title":"Cancel a specific workflow run","deprecated":null,"version":null,"openapi":"https://docs-cdn.narrative.io/api-reference/main/openapi.json post /workflows/{workflow_id}/runs/{run_id}/cancel","href":"/api-reference/workflows/cancel-a-specific-workflow-run"}]}]}]},"basePath":"","title":"Put Statistics Configuration - Narrative I/O Knowledge Base","buildId":"dpl_345ReqzYaAjzS9QpeJemsKdb7KDj","deploymentId":"dpl_345ReqzYaAjzS9QpeJemsKdb7KDj","dynamics":["c2aa737661","2b790eda92","b0f84f53ff","a9bb46feb3"],"chunks":["OpenApiReferenceProvider-C8RPHPxo.js","utils-0BK-9q6z.js","cloneDeep-izs3Hzxb.js","_Uint8Array-BVIqJ90l.js","isObjectLike-C8vmzPEN.js","isArray-Dcu1dQ5t.js","utils-DfjzsUJT.js","toString-BX-iyh8G.js","isSymbol-CSH9U2Gm.js","addUniqueKeysToSchema-B4v9psJ4.js","snippetPresets-CpTQv-Ez.js","style-to-object-BY3JEAdk.js","v4-DIgz8zy6.js","ApiExamples-BNP-Fvr0.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-BSgu6h1D.js","shallow-Biv1i9Gs.js","getApiPlaygroundDisplay-BoGOXhtF.js","CodeSnippet-DvQoT18_.js","CodeSnippets-Dnpa15xT.js","Page-Buji1S4J.js","getPastedJson-xAIyhUFE.js","icon-S6FBih11.js","MethodPill-SaYeUZyk.js","DuplicateIcon-Cs-p3v2Q.js","createIcon-DjCFEoHq.js","DynamicMarkdown-BcnBltEQ.js","SectionHeading-BUBl0eEF.js","axios-vUo_bRtp.js","Markdown-h4cOoD8d.js","clsx-B2v50t8t.js","lib-DuNMoZ05.js","lib-B8HbPgcC.js","html-void-elements-mCSPHezU.js","dist-DJnKvr0g.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","AssistantPageLink-BHrrjR1K.js"]}